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

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top