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/)
-   -   [FMX]Auf Canvas zeichnen (https://www.delphipraxis.net/163697-%5Bfmx%5Dauf-canvas-zeichnen.html)

Union 12. Okt 2011 01:33

[FMX]Auf Canvas zeichnen
 
Ich versuche in einer FMX iOS-HD-Anwendung auf einen Canvas zu zeichnen. Funktioniert nur leider nicht :( Hat das schon jemand geschafft? Hier mein Code (Canvas ist ein TForm.Canvas, hab es aber auch schon mit einem Image versucht):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Stroke.Color := claBlue;
  Canvas.Stroke.Kind:= TBrushKind.bkSolid;
  Canvas.DrawRect(RectF(0,0,50,50),0,0,AllCorners,1);
end;

Union 12. Okt 2011 11:03

AW: [FMX]Auf Canvas zeichnen
 
Ich habe herausgefunden, dass FMX unter Windows XP kein driektes Zeichnen auf dem Canvas erlaubt. Man muss das über ein TBitmap selber buffern :wall: [edit]Nein, auch unter Windows 7 geht es nicht, weder 32 noch 64 bit :roll:[/edit]

wurzelzwerg 12. Okt 2011 13:16

AW: [FMX]Auf Canvas zeichnen
 
Versuchs mal im OnPaint :)

Union 12. Okt 2011 16:12

AW: [FMX]Auf Canvas zeichnen
 
Das geht, danke ;) Aber ich versteh die Logik dahinter nicht so ganz. Das würde ja heißen, dass FMX permanent diesen Event auslöst, auch wenn gar nichts zu zeichnen wäre. Und dass man, wenn man zeit- oder ereignisgesteuert Zeichnen will, seine Steuerung komplett umstellen muss.

wurzelzwerg 12. Okt 2011 16:51

AW: [FMX]Auf Canvas zeichnen
 
Nicht permanent, immer dann wenn das BS meint das Fenster neu zeichnen zu müssen(verschieben, verdecken etc).
So wie du das machen wolltest ging das noch nie. OK evtl hat man kurz was gesehen aber anderes Fenster drüberschieben schon war alles weg.
Alternativ kannst du ein TImage manipulieren, das kümmert sich selbst ums Neuzeichnen.

Union 12. Okt 2011 17:04

AW: [FMX]Auf Canvas zeichnen
 
Man kann leider auch weder auf den Canvas eines TImage noch auf das enthaltene Bitmap zeichnen. Man muss auf ein in-Memory Bitmap zeichnen und das dann dem Image zuweisen. Dass solche Zeichnung nicht von Dauer ist, ist mir klar. Aber was ist mit dynamischem Zeichnen? Z.b. in einem Zeichenprogramm, oder um eine Mausspur nachzuzeichnen usw.

wurzelzwerg 12. Okt 2011 17:18

AW: [FMX]Auf Canvas zeichnen
 
Also das hier funktioniert bei mir:
Delphi-Quellcode:
//Image1: TImage;
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Bitmap.Canvas.Stroke.Color := claBlue;
  Image1.Bitmap.Canvas.Stroke.Kind:= TBrushKind.bkSolid;
  Image1.Bitmap.Canvas.DrawRect(RectF(0,0,50,50),0,0,AllCorners,1);
  Image1.Repaint;
end;
Mausspur:
Delphi-Quellcode:
var
  Form1: TForm1;
  p: TPointF;

implementation

{$R *.lfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  p.X:= 0;
  p.Y:= 0;
  Image1.Bitmap.Canvas.Stroke.Color := claBlue;
  Image1.Bitmap.Canvas.Stroke.Kind:= TBrushKind.bkSolid;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
var p2: TPointF;
begin
  p2.X:= X;
  p2.Y:= Y;
  Image1.Bitmap.Canvas.DrawLine(p, p2, 1);
  p:= p2;
  Image1.Repaint;
end;

Union 12. Okt 2011 17:33

AW: [FMX]Auf Canvas zeichnen
 
Und bei mir leider nicht. Nicht 32 bit, nicht 64 bit und nicht unter iOS. Da meine GameClass aber einen Canvas im Constructor-Aufruf als Parameter hat, ist das auch kein Problem ;) Ich hatte nur bisher immer den Formcanvas angegeben. Trotzdem interessiert micht warum das auf die billige, direkte Art nicht geht.

wurzelzwerg 12. Okt 2011 17:46

AW: [FMX]Auf Canvas zeichnen
 
Hmm. Bei mir ist das ne HD-IOS-Anwendung auf XP, auf dem Mac hab ich das nicht probiert.
Das Image darf allerdings nicht leer sein.

Zitat:

Trotzdem interessiert micht warum das auf die billige, direkte Art nicht geht.
Weils eben nicht nur im Click gezeichnet werden muss wennst auf den FormCanvas malst.

Union 12. Okt 2011 18:00

AW: [FMX]Auf Canvas zeichnen
 
Also nochmal vielen herzlichen Dank ;) Wenn man so blöd ist wie ich und das Repaint vergisst :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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