Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Zeichnen auf Canvas unter Firemonkey (https://www.delphipraxis.net/212858-zeichnen-auf-canvas-unter-firemonkey.html)

Matima 14. Apr 2023 14:21

Zeichnen auf Canvas unter Firemonkey
 
Hallo, ich bin Firemonkey Anfänger und möchte auf Canvas unter Android Zeichnen.
Wenn ich bei folgendem Programm auf den Button clicke flackert die Linie kurz auf und verschwindet dann wieder.
Unter Windows als Zielplattform bleibt die Linie.
Was mache ich falsch?

procedure TForm2.Button1Click(Sender: TObject);

begin
Panel1.Canvas.BeginScene;
Panel1.Canvas.Stroke.Color := TAlphaColorRec.Red;
Panel1.Canvas.DrawLine(PointF(0, 0), PointF(Panel1.Width, Panel1.Height), 10);
Panel1.Canvas.EndScene;
end;

Vielen Dank für eure Hilfe

KodeZwerg 14. Apr 2023 14:47

AW: Zeichnen auf Canvas unter Firemonkey
 
Willkommen zum ersten Beitrag! Es tut gut von Dir zu hören :-)
Füge "Stroke.Kind := TBrushKind.bkSolid;" hinzu, das ist idR nur bei Windows voreingestellt.

Matima 14. Apr 2023 15:19

AW: Zeichnen auf Canvas unter Firemonkey
 
Vielen Dank,
ich habe das Programm erweitert:

procedure TForm2.Button1Click(Sender: TObject);
var Brush :TStrokeBrush;

begin
Brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);

Panel1.Canvas.BeginScene;
Panel1.Canvas.Stroke.Kind := TBrushKind.bkSolid;
Panel1.Canvas.Stroke.Color := TAlphaColorRec.Red;
Panel1.Canvas.DrawLine(PointF(1, 1), PointF(Panel1.Width, Panel1.Height), 50);

Panel1.Canvas.EndScene;
end;


Das Verhalten ist leider gleich geblieben

KodeZwerg 14. Apr 2023 16:35

AW: Zeichnen auf Canvas unter Firemonkey
 
Hmmm das einzige was mir noch einfällt wäre "Stroke.Thickness := 1.0;" zu setzen (für die dicke der linie) oder mal das ganze in einer PaintBox anstelle eines Panels probieren.

Matima 14. Apr 2023 17:35

AW: Zeichnen auf Canvas unter Firemonkey
 
Habe ich beides probiert.
Reagiert genau gleich.
Kann es an meinem Handy und Android 10 liegen?

Matima 14. Apr 2023 17:58

AW: Zeichnen auf Canvas unter Firemonkey
 
Ich habe das Linienzeichnen jetzt in der OnPaint Methode gemacht.
Jetzt bleibt die Linie!

procedure TForm4.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var Brush: TStrokeBrush;
begin
Brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);

PaintBox1.Canvas.BeginScene;
PaintBox1.Canvas.Stroke.Kind := TBrushKind.bkSolid;
PaintBox1.Canvas.Stroke.Color := TAlphaColorRec.Red;
PaintBox1.Canvas.Stroke.Thickness := 1.0;
PaintBox1.Canvas.DrawLine(PointF(1, 1), PointF(PaintBox1.Width, PaintBox1.Height), 50);

PaintBox1.Canvas.EndScene;
end;

Aber wie kann ich das Zeichnen in einem Button Click Ereignis bewirken?
Gibt es eine Möglichkeit die OnPaint Methode von außerhalb aufzurufen?
Sorry, aber ich mache gerade erst meine ersten Schritte.....

himitsu 14. Apr 2023 18:54

AW: Zeichnen auf Canvas unter Firemonkey
 
Indem du dort irgendwo speicherst, dass es dann in OnPaint gemacht werden soll,
wo du Dieses dann prüfst und es dort machst. :angle2:

Matima 14. Apr 2023 20:16

AW: Zeichnen auf Canvas unter Firemonkey
 
Kannst du bitte ein Beispielcode senden?

Vielen Dank

Matima 15. Apr 2023 09:47

AW: Zeichnen auf Canvas unter Firemonkey
 
Ich habe das Problem gelöst.
Es geht über das Bitmap von Image:

procedure TForm5.Button2Click(Sender: TObject);
var
BMP: TBitmap;
MyRect: TRectF;
begin
BMP := TBitmap.Create;
BMP.SetSize(400, 400);
MyRect := TRectF.Create(150, 150, 200, 200);
try
BMP.Clear(TAlphaColorRec.Yellow);
BMP.Canvas.BeginScene;

//R.Create(10, 10, 390, 390);
//BMP.Canvas.Font.Size := 36;
//BMP.Canvas.Font.Style:=[TFontStyle.fsbold];
//lWidth := BMP.Canvas.TextWidth(lTextOut);
//bWordWrap := (lwidth > 380);
//BMP.Canvas.FillText(R, lTextOut, bWordWrap, 1, [TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Center);

BMP.Canvas.Stroke.Kind := TBrushKind.bkSolid;
BMP.Canvas.Stroke.Color := TAlphaColorRec.Brown;
BMP.Canvas.Stroke.Thickness := 5.0;
BMP.Canvas.DrawLine(PointF(1,1),PointF(BMP.Width,B MP.Height),100);
BMP.Canvas.Stroke.Color := TAlphaColorRec.Green;
BMP.Canvas.DrawEllipse(MyRect,100);
BMP.Canvas.EndScene;
Image1.Bitmap.Assign(BMP);
finally
FreeAndNil(BMP);
end;
end;


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