Frage

Ich habe Probleme beim Ändern der Größe einer TPaintBox und beim Zeichnen darauf:

Auf meinem Formular (mit dem Namen FMain) habe ich eine TPaintBox (mit dem Namen DisplayImage) abgelegt, deren Größe ich zu ändern versuche, wenn die Größe des Formulars geändert wird.

Dazu habe ich eine OnResize()-Methode für FMain geschrieben (ich habe bestätigt, dass sie korrekt aufgerufen wird), in der ich versuche, die Größe des DisplayImage zu ändern:

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;

Meiner Meinung nach sollte der letzte Code ein grünes Vollbildrechteck über das gesamte Bild zeichnen, sodass es praktisch immer grün ist.Stattdessen erhalte ich ein graues Bild (genau wie die Standard-Hintergrundfarbe von Delphi) und ab und zu blinkt während der Größenänderung für den Bruchteil einer Sekunde das grüne Bild auf.

Was habe ich übersehen? Gibt es eine versteckte Komponente, die ich nach der Größenänderung aktualisieren muss?

Vielen Dank im Voraus,

Schneesturm

War es hilfreich?

Lösung

Erstens, anstatt es zu tun

DisplayImage.Width := FMain.ClientWidth;
DisplayImage.Height := FMain.ClientHeight;

Bei jeder Größenänderung einfach einstellen Align := alClient des Farbkastens.

Zweitens, um zum Farbkasten zu zeichnen, verwenden Sie das OnPaint Veranstaltung des Malkastens:

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top