Vielen Dank!
Das Demo hat geholfen: Während Malen in der FormCreate denselben Effekt hatte, wie im Ausgangsbeispiel, funktioniert es, wenn man die Methode Image1Paint benutzt. Wie ich jetzt sehe, ergibt sich das aus der Dokumentation unter
https://wiki.lazarus.freepascal.org/Dev ... o_a_TImage
"The canvas of the visual area of a TImage is only accessible during Image1.OnPaint via Image1.Canvas."
Die beiden Aufrufe von Image1.invalidate habe ich aus dem Beispielcode herausgenommen. Mit den Aufrufen war es so, dass die Form nicht verschwand, wenn sie geschlossen wurde. Da dass OnPaint-Event ausgelöst wird, wenn das TImage invalidiert wird, schien es mir auch nicht nötig, innerhalb der ImagePaint-Methode Image.invalidate aufzurufen - oder sehe ich da ewas falsch?
Mein - wie erwartet funktionierender - Code sieht jetzt jedenfalls so aus:
Code: Alles auswählen
rocedure TForm3.Image1Paint(Sender: TObject);
begin
//Image1.invalidate; auskommentiert, vgl. o.
Image1.Canvas.pen.Style:=psSolid;
Image1.Canvas.pen.Color:=clRed;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Ellipse(100,100,300,300);
//Image1.invalidate;
end;
Nochmal vielen Dank!
PS: Die dynamische Generierung der Form innerhalb der Prozedur ShowResult habe ich erstmal beibehalten. Die automatische Erzeugung einer Instanz in der .lpr und die Deklarierung einer Variablen Form3 in der zugehörigen Unit hae ich natürlich abgeschaltet/gelöscht.