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: 11955 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: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- 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: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- private { Private declarations } x, y: Integer; b) Coloque o código abaixo no evento OnCreate do formulário: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- 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: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- 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: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- 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 |
C# - Como retornar a quantidade de elementos que podem ser armazenados na List do C# sem redimensioná-la Excel - Como converter graus em radianos no Excel usando a função RADIANOS() - Trigonometria no Excel |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |