QUOTE(Visitante @ 09/02/2007 - 09:21)

Sim eu quardo os pontos inicial e final de cada linha que chamo de transição em um vetor.
Quando movo um componente calculo novamente os pontos que envolvem esse componente a chamo um método que lê o vetor de transicoes e redesenha na tela cada transicao...
Robison, acho que esse assunto é referente ao seu outro
post, certo?
Eu não saberia como resolver o problema que vem se desenrrolando por aqui. Mas já que você mantém um tipo de estrutura que lhe indica o que e onde algo deve ser desenhado, permitam-me sugeri algo que já utilizei em outra oportunidade, que se bem me lembro não gerava este efeito de piscar. Era um esquema para desenha fluxogramas/portas lógicas. Derrepente vale o teste.
O princípio é o seguinte: você define e cria um canvas no form onde estará adicionado o seu ScrollBox, então cria um procedimento para desenhar seus elementos gráficos no scrollbox utilizando aquele canvas (observe, não é utilizado outra coisa além do scrollbox). Um exemplo:
CODE
type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
private
ScrollCanvas :TCanvas;
procedure DesenhaDiagrama;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ScrollCanvas := TCanvas.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ScrollCanvas.Free;
end;
// aqui va o procedimento que lê a estrutura de dados e procede ao
// desenho por ela representado
procedure TForm1.DesenhaDiagrama;
begin
ScrollCanvas.Handle := GetDC(ScrollBox1.handle);
// desenha os diagramas
...
ScrollCanvas.Rectangle(10, 10, 200, 150); // desenhando apenas um retângulo
...
ReleaseDC(ScrollBox1.handle, ScrollCanvas.Handle);
end;
// aqui, quando o form for redesenhado, redesenha o diagrama
procedure TForm1.FormPaint(Sender: TObject);
begin
DesenhaDiagrama;
end;
Abraços