Delphi - TPaintBox - Redimensionar
Pergunta
Estou tendo problemas para redimensionar um TPaintBox e desenhar nele:
No meu formulário (chamado FMain), deixei cair um TPaintBox (chamado DisplayImage), que estou tentando redimensionar à medida que o formulário é redimensionado.
Para fazer isso escrevi um método OnResize() para FMain (confirmei que está sendo chamado corretamente) no qual tento redimensionar o DisplayImage:
procedure TFMain.FormResize(Sender: TObject);
begin
DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;
DisplayImage.Canvas.Brush.Color := clGreen;
DisplayImage.Canvas.Brush.Style := bsSolid;
DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height);
end;
IMHO, o último código deve desenhar um retângulo verde de imagem completa sobre a imagem completa, tornando-a efetivamente sempre verde.Em vez disso, obtenho uma imagem cinza (assim como a cor BG padrão do Delphi) e de vez em quando, durante o redimensionamento, por uma fração de segundo, a imagem verde pisca.
O que estou perdendo, há algum componente oculto que preciso atualizar após o redimensionamento?
Agradeço antecipadamente,
Nevasca
Solução
Em primeiro lugar, em vez de fazer
DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;
em cada redimensionamento, basta definir Align := alClient
da caixa de tinta.
Em segundo lugar, para desenhar na caixa de pintura, use o OnPaint
evento da caixa de pintura:
procedure TFMain.DisplayImagePaint(Sender: TObject);
begin
DisplayImage.Canvas.Brush.Color := clGreen;
DisplayImage.Canvas.Brush.Style := bsSolid;
DisplayImage.Canvas.Rectangle(0, 0, DisplayImage.Width, DisplayImage.Height)
end;