Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FM: Auf Panel.Canvas malen (https://www.delphipraxis.net/179364-fm-auf-panel-canvas-malen.html)

MrSpock 2. Mär 2014 19:01

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:
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;
Habe es auch schon ohne BeginUpdate und EndUpdate und auch ohne Repaint versucht, aber es erscheint nichts auf dem Panel.

mkinzler 2. Mär 2014 19:27

AW: FM: Auf Panel.Canvas malen
 
Versuch mal
Delphi-Quellcode:
theRect := TRectF.Create( 10,40,40,20);

MrSpock 2. Mär 2014 19:39

AW: FM: Auf Panel.Canvas malen
 
Keine Änderung. Es wird nichts angezeigt.

daywalker9 2. Mär 2014 19:58

AW: FM: Auf Panel.Canvas malen
 
Unter FM muss man glaube ich noch BeginScene aufrufen.

Volker Z. 2. Mär 2014 20:16

AW: FM: Auf Panel.Canvas malen
 
Hallo,

jetzt der Code im richtigen Eventhandler:
Delphi-Quellcode:
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;
Gruß

mlc42 2. Mär 2014 20:17

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

MrSpock 3. Mär 2014 20:22

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.

Harry Stahl 3. Mär 2014 23:54

AW: FM: Auf Panel.Canvas malen
 
Zitat:

Zitat von mlc42 (Beitrag 1250328)
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.
Martin

Also ich finde, das macht Sinn. Auch unter der VCL sollte man bei Controls die Zeichenaktionen auf den Canvas immer in den OnPaint, OnDraw-Events vornehmen. Wenn man das nicht so macht, und z.B. ein anderes Fenster über den selbst gezeichneten Canvas (außerhalb des onPaint-Events) zieht, dann ist die Darstellung weg oder verschmiert.

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 23:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz