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 Paintbox - Gezeichnete Linie löschen (https://www.delphipraxis.net/127492-paintbox-gezeichnete-linie-loeschen.html)

oli_a 14. Jan 2009 11:58


Paintbox - Gezeichnete Linie löschen
 
Hallo,
in meinem Programm, zeichne ich mit Hilfe der Paintbox ein in TImage geladenes Bild ab.
Mit jedem Mausklick, werden die Punkte mit Hilfe von LineTo verbunden und die Koordinaten der Punkte abgespeichert.

Ich würde gern realisieren, dass wenn sich jemand "verzeichnet", man die zu letzt gezeichnete Line mit einem Mausrechtsklick oder ähnlichem wieder löschen kann.

Hat jemand eine Idee, wie ich die bewerkstelligene könnte?

gruß
oli

himitsu 14. Jan 2009 12:02

Re: Paintbox - Gezeichnete Linie löschen
 
da mußt du einfach nur die letze Linie, mit der Hintergrundfarbe übermalen.

oder besser noch, wenn du die Punkte gespeichert hast, dann alles löschen und alle Linien neu malen, welche vor der letzen Linie erstellt wurden.

tomsson74 14. Jan 2009 12:03

Re: Paintbox - Gezeichnete Linie löschen
 
Du könntest Deine Linien mit

Delphi-Quellcode:
Pen.Mode := pmNot
zeichnen. Beim ersten mal wird die Farbe invertiert, wenn Du nochmal drüber zeichnest werden die farben wieder "normal".

Ansonsten fällt mir noch das Stichwort "XOR" ein.

Grüße
Thomas

oli_a 14. Jan 2009 12:14

Re: Paintbox - Gezeichnete Linie löschen
 
Also der Paintbox ist wie gesagt ein TImage unterlegt. Mit Hintergrundfarbe übermalen geht daher nicht.
Ich denke, ich werde es wohl mit "alles löschen" und "neumalen" versuchen.

und auch Pen.Mode := pmNot werd ich mir mal anschauen.

Danke für die Antworten.

Uwe Raabe 14. Jan 2009 12:20

Re: Paintbox - Gezeichnete Linie löschen
 
Normalerweise wird in eine Paintbox im OnPaint-Event gezeichnet. Dieser wird immer dann aufgerufen, wenn die Paintbox neu gezeichnet werdn muss (z.B. wenn das Formular minimiert oder von einem anderen Fenster überdeckt war.

Insofern solltest du dir die Punkte der Linien in einer Liste merken (wenn du das nicht schon direkt tust) und diese Liste im OnPaint abarbeiten. Bei jeder Änderung der Liste rufst du dann ein PaintBox.Invalidate auf, damit diese auch neu gemalt wird.

Ein Löschen des letzten Punktes geht dann ganz einfach durch Löschen des letzten Elementes der Liste.

nuclearping 14. Jan 2009 12:27

Re: Paintbox - Gezeichnete Linie löschen
 
Ich würde das in verschiedenen Schichten realisieren.

1.) Anwender klickt auf TImage / TPaintbox -> X/Y-Pos werden in eine Liste gespeichert.
2.) In einem temp. Bitmap wird anhand der Liste die Linie generiert.
3.) Das temp. Bitmap wird mit Assign dem TImage / TPaintbox zugewiesen.

Somit hast du immer ein "Puffer", in dem du zeichnest und der nur auf dem jeweiligen Image ausgegeben wird. Damit weißt du auch immer, welche Linien zu zeichnen sind und welche nicht. Weiterhin lassen sich damit noch einige andere Sachen realisieren (Verschieben, Drehen, ...). EVA-Prinzip halt. :P

oli_a 14. Jan 2009 14:04

Re: Paintbox - Gezeichnete Linie löschen
 
oh, vielen Dank. Darüber werd ich mich erstmal genauer informieren müssen. (Programmier Anfänger)


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