![]() |
FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Liste der Anhänge anzeigen (Anzahl: 3)
Im anliegenden Minimal-Beispiel schreibe ich im OnPaint-Ereignis fünf Zeilen versetzt ins Canvas - okay. Wenn aber nach Click im OnMouseDown die Zeilen 0 und 4 nochmals geschrieben werden, so erscheinen sie an falscher Position. Es sieht eher aus, als würde ins Form-Canvas geschrieben, und zwar sogar außerhalb der PaintBox, nämlich im darüberliegenden Toolbar, siehe Screenshot2.
Interessanterweise hat ja das FMX-OnPaint einen Parameter "Canvas" - den gibt es in der VCL nicht. Vermutlich liegt hier mein Verständnismangel. Andererseits ist der Parameter laut Debugger immer identisch mit TPaintBox(Sender).Canvas! Was mache ich falsch? |
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Ich würde nicht unbedingt versuchen den Canvas direkt zu beschreiben, und die verschachtelten FMX Controls auszutricksen.
Warum lässt Du nicht einfach immer Alles im OnPaint neu malen ? Dann ist nur eine Routine dafür verantwortlich, und es sollte keine seltsamen Überraschungen geben. |
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Bei FMX musst du außerhalb des OnPaint-Events nach dem BeginScene noch die Matrix des Controls setzen:
Delphi-Quellcode:
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin var c:= TPaintBox(Sender).Canvas; if c.BeginScene then begin c.SetMatrix(TPaintBox(Sender).AbsoluteMatrix); PaintItem( c, 0 ); PaintItem( c, 4 ); c.EndScene; end; end; |
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Zitat:
Kannst Du auch den Sinn des "Canvas"-Parameters in OnPaint() erklären? Und bei der Gelegenheit noch eine FMX-Frage: Was entspricht dem ClientWidth aus der VCL? |
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Zitat:
Zitat:
|
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Zitat:
Zitat:
|
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Zitat:
Zitat:
|
AW: FMX-PaintBox.Canvas: Zeichnen ausserhalb OnPaint-Ereignis
Zitat:
"Contentbounds" enthält das Client-Rechteck. Allerdings leider noch nicht im OnCreate() und im OnResize(). (Wie der Name eigentlich auch klar sagt wenn man VCL-gedanklich nicht noch auf was mit Client... fixiert ist.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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