![]() |
[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; |
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]
|
AW: [FMX]Auf Canvas zeichnen
Versuchs mal im OnPaint :)
|
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.
|
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. |
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.
|
AW: [FMX]Auf Canvas zeichnen
Also das hier funktioniert bei mir:
Delphi-Quellcode:
Mausspur:
//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;
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; |
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.
|
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:
|
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 19:56 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 by Thomas Breitkreuz