![]() |
teile in canvas löschen
hallo, ich habe (mal wieder ;)) eine frage zu canvas:
gibt es eine möglichkeit bestimmte stellen in einer paintbox zu löschen, oder z.b die letzte linie, die gezeichnet wurde wieder zu löschen? ich habe nen funktionsplotter, und würde gerne einige graphen wieder löschen, andere aber beibehalten; is das machbar, ohne einen riesen aufwand zu betreiben?? btw, bin relativ neu bei delphi und kenn mich noch nicht so gut aus... :pale: |
Re: teile in canvas löschen
Hi,
ein Canvas ist eine sehr einfache Zeichenfläche. Du kannst da beliebig raufzeichnen, aber du überzeichnest rücksichtslos (vom Canvas aus gesehen), mehr Möglichkeiten gibt es erstmal nicht. Das heißt natürlich, dass es keine Ebenen und ähnliches direkt gibt und somit kannst du nicht einfach etwas löschen. Wenn du einen Canvas wieder löschen willst, dann füllst du einfach die gesamte Fläche mit der Hintergrundfarbe. Wenn du nun einen Funktionsgraphen löschen möchtest, dann kannst du einfach diesen Graphen aus der Liste (von allem was gezeichnet werden soll) löschen, den Canvas mit Hintergrundfarbe überzeichnen und alles was noch in der Liste steht neu zeichnen. Eine Alternative ist es noch, dem Stift als Stil psXOR bzw. psNotXOR zuzuweisen. Hierbei wird jedes Pixel dass du mit dem Stift bearbeitest XOR verknüpft mit der Stiftfarbe. Der Vollständigkeit halber erwähne ich hier nochmal, XOR ist immer dann wahr, wenn zwei Bits unterschiedlich sind, sonst falsch. Wenn du nun also einen weißen Hintergrund hast ($FF) und du den mit einem weißen Stift XOR verknüpfst, dann kämst du zu $FF XOR $FF = $00 (schwarz). Zeichnest du mit dem gleichen Stift wiederum die gleiche Linie, so verknüpfst du $00 XOR $FF = $FF (weiß). Damit löscht du also auch gezeichnete Linien. Das Problem bei Funktionsgraphen ist, dass du natürlich auch alle Schnittpunkte mit anderen Graphen löscht (darum müsstest du dich dann wieder kümmern) Gruß Der Unwissende |
Re: teile in canvas löschen
danke erstmal für die umfassende antwort! :corky:
an die erste methode die, du erklärt hast, habe ich auch schon gedacht, ist aber mit einem verhältnismäßig großen aufwand verbunden, da ich dann meinen funktionsplotter grundlegend umschreiben müsste :( . werd mal schaun ob ichs irgendwie reinbekomme.. aber ersteinmal danke für einen weiteren denkanstoß |
Re: teile in canvas löschen
Zum Löschen des Canvas kannst du auch einfach
Delphi-Quellcode:
schreiben. Dass ist deutlich einfacher und eleganter, als die Canvas zu übermalen.
canvas.picture := nil;
|
Re: teile in canvas löschen
Zitat:
An sich lohnt sich immer ein recht modularer Aufbau (wobei dass weit genug vorraus schauende Planen nicht unbedingt trivial ist). Aber gerade bei einem Funktionsplotter, solltest du die Funktionen zum Zeichnen einzelner Funktionsgraphen in einer eigenen Methode auslagern. Wenn du dann noch in einem Array oder einer Liste alles das speicherst, was du benötigst um alle Funktionen zu speichern, sollte es für dich leicht sein, nach dem entfernen einfach alles neu zu zeichnen (was noch aktuell ist). Gruß Der Unwissende |
Re: teile in canvas löschen
Oh. Da muss ich mich entschuldigen. Bis jetzt waren alle Canvases die ich hatte, auf einem Image und da muss ich was verwechselt haben. :duck:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 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