Delphi - TPaintBox - Redimensionner
Question
J'ai des problèmes pour redimensionner une TPaintBox et dessiner dessus :
Sur mon formulaire (nommé FMain), j'ai déposé une TPaintBox (nommée DisplayImage), que j'essaie de redimensionner à mesure que le formulaire est redimensionné.
Pour ce faire, j'ai écrit une méthode OnResize() pour FMain (j'ai confirmé qu'elle est appelée correctement) dans laquelle j'essaie de redimensionner 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;
À mon humble avis, le dernier code devrait dessiner un rectangle vert complet sur l'image complète, ce qui le rend effectivement toujours vert.Au lieu de cela, j'obtiens une image grise (tout comme la couleur bg standard de Delphi) et de temps en temps pendant le redimensionnement pendant une fraction de seconde, l'image verte clignote.
Qu'est-ce qui me manque, y a-t-il un composant caché que je dois mettre à jour après le redimensionnement ?
Merci d'avance,
Tempête De Neige
La solution
Tout d'abord, au lieu de faire
DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;
à chaque redimensionnement, définissez simplement Align := alClient
de la boîte de peinture.
Deuxièmement, pour dessiner vers la boîte de peinture, utilisez le OnPaint
événement de la boîte à peinture :
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;