![]() |
FM: Auf Panel.Canvas malen
Hallo,
versuche jetzt schon etwas länger auf ein Canvas eines Panels zu malen. Unter der VCL funktioniert es. Unter FireMonkey habe ich mal folgenden Code geschrieben:
Delphi-Quellcode:
Habe es auch schon ohne BeginUpdate und EndUpdate und auch ohne Repaint versucht, aber es erscheint nichts auf dem Panel.
procedure TForm1.Button2Click(Sender: TObject);
var theRect : TRectF; begin theRect.Left := 10; theRect.Top := 40; theRect.Right := 50; theRect.Bottom := 60; Panel1.Canvas.Stroke.Color := claGreen; Panel1.BeginUpdate; Panel1.Canvas.FillRect(theRect, 0, 0, [], 1.0); Panel1.EndUpdate; Panel1.Repaint; end; |
AW: FM: Auf Panel.Canvas malen
Versuch mal
Delphi-Quellcode:
theRect := TRectF.Create( 10,40,40,20);
|
AW: FM: Auf Panel.Canvas malen
Keine Änderung. Es wird nichts angezeigt.
|
AW: FM: Auf Panel.Canvas malen
Unter FM muss man glaube ich noch BeginScene aufrufen.
|
AW: FM: Auf Panel.Canvas malen
Hallo,
jetzt der Code im richtigen Eventhandler:
Delphi-Quellcode:
Gruß
procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
begin Panel1.Canvas.BeginScene; Panel1.Canvas.Fill.Color := claGreen; Panel1.Canvas.FillRect (ARect, 0, 0, [], 1.0); Panel1.Canvas.EndScene end; |
AW: FM: Auf Panel.Canvas malen
Das ist wohl ein FM Feature. Zeichnen geht nur im Onpaint.
Nur bei Image.Bitmap.Canvas kann man das so machen. Warum das bei Image dann doch geht erschliesst sich mir nicht so ganz. So ist es bei mir zumindest bei XE5 für Android. Martin |
AW: FM: Auf Panel.Canvas malen
Danke.
@Volker: Der Code funktioniert auch unter OSX. @Martin: Auch das kann ich bestätigen, dass auf das Canvas eines panels nur in der OnPaint Methode gezeichnet werden kann. |
AW: FM: Auf Panel.Canvas malen
Zitat:
Image.Bitmap.Canvas ist ja quasi nur ein "interner" Canvas, den Du benötigst, um das Bitmap zu verändern (es existieren dafür natürlich noch andere Wege). WANN Du das dann anzeigst, ist eine ganz andere Frage. Von alleine wird die Änderung auch nicht angezeigt, allenfalls wenn Du mit der Maus oder einem anderen Fenster darüber ziehst, bzw. programmseitig eine Aktualisierung erzwingst. Letztlich ist es eine Frage der optimierten Darstellung, die wenig Ressourcen beanspruchen soll: Änderungen nur anzeigen, wenn vorhanden und notwendig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz