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

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top