Você está aqui: Delphi ::: Dicas & Truques ::: Gráficos |
Meus desenhos e gráficos desaparecem quando o formulário é redesenhado. O que fazer?Quantidade de visualizações: 12168 vezes |
|
Quando estamos desenhando gráficos ou imagens na superfície do formulário ou qualquer outro controle em Delphi podemos perceber que tais desenhos são apagados quando o formulário é minimizado e maximizado ou sobreposto por outro formulário e novamente exibido. Para evitar que isso aconteça, qualquer desenho deve ser feito no evento OnPaint do formulário ou controle desejado. Note que este evento é disparado antes que os controles (botões, caixas de texto, etc) sejam desenhados ou redesenhados no formulário). Veja um exemplo no qual usamos o evento OnPaint do formulário para desenhar uma linha vertical no mesmo:
procedure TForm2.FormPaint(Sender: TObject);
begin
// este trecho de código mostra como desenhar uma
// linha vertical no formulário
// vamos obter o canvas do formulário
with Form2.Canvas do
begin
// vamos mover a caneta para as coordenadas x = 20; y = 20
MoveTo(20, 20);
// vamos desenhar uma linha no formulário partindo
// das coordenadas anteriores até as coordenadas
// x = 300; y = 20
LineTo(300, 20);
end;
end;
Agora o desenho é feito todas as vezes que o formulário for redesenhado pelo Windows. Há, contudo, casos nos quais queremos forçar o redesenho do formulário, ou seja, queremos disparar o evento OnPaint. Para isso só precisamos chamar o método Repaint() do componente no qual o desenho vai ser efetuado. Este método chama o método Invalidate() e então o método Update() para forçar o redesenho. Para ver um exemplo do uso do método Repaint(), siga os seguintes passos: a) Vá na seção de declaração de variáveis globais e declare as seguintes variáveis:
private
{ Private declarations }
x, y: Integer;
b) Coloque o código abaixo no evento OnCreate do formulário: procedure TForm2.FormCreate(Sender: TObject); begin x := 10; y := 10; end; c) Agora coloque o código abaixo no evento OnClick de um botão: procedure TForm2.Button1Click(Sender: TObject); begin // força o redesenho do formulário Repaint; end; d) Finalize colocando o código abaixo no evento OnPaint do Form:
procedure TForm2.FormPaint(Sender: TObject);
begin
with Form2.Canvas do
begin
// posiciona a caneta de desenho
MoveTo(x, y);
// vamos obter as novas coordenadas x e y;
x := Random(500);
y := Random(500);
// vamos desenhar a linha
LineTo(x, y);
end;
end;
Execute a aplicação e experimente clicar no botão várias vezes. Você verá que a cada clique a linha anterior é apagada e uma nova linha é desenhada em coordenadas aleatórias. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
|
Java - Como retornar a quantidade de palavras em uma string Java usando um objeto da classe StringTokenizer |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




