AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

teile in canvas löschen

Ein Thema von Mr. Pink · begonnen am 11. Mär 2006 · letzter Beitrag vom 12. Mär 2006
Antwort Antwort
Mr. Pink

Registriert seit: 29. Jan 2006
72 Beiträge
 
#1

teile in canvas löschen

  Alt 11. Mär 2006, 23:11
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...
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: teile in canvas löschen

  Alt 12. Mär 2006, 10:31
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
  Mit Zitat antworten Zitat
Mr. Pink

Registriert seit: 29. Jan 2006
72 Beiträge
 
#3

Re: teile in canvas löschen

  Alt 12. Mär 2006, 14:18
danke erstmal für die umfassende antwort!

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ß
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: teile in canvas löschen

  Alt 12. Mär 2006, 14:45
Zum Löschen des Canvas kannst du auch einfach
canvas.picture := nil; schreiben. Dass ist deutlich einfacher und eleganter, als die Canvas zu übermalen.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: teile in canvas löschen

  Alt 12. Mär 2006, 19:02
Zitat von Toxman:
Zum Löschen des Canvas kannst du auch einfach
canvas.picture := nil; schreiben. Dass ist deutlich einfacher und eleganter, als die Canvas zu übermalen.
Das führt dich nur leider zu dem Problem, dass ein Canvas keine Eigenschaft Picture hat. Ein Image mag diese Eigenschaften noch haben, aber da du mit einer Paintbox und/oder direkt mit einem Zeichencanvas arbeitest, steht dir diese Möglichkeit erst gar nicth zur Verfügung. Genauer gesagt ist es wohl leichter deinen Plotter als TCanvas umzuschreiben.

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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: teile in canvas löschen

  Alt 12. Mär 2006, 19:12
Oh. Da muss ich mich entschuldigen. Bis jetzt waren alle Canvases die ich hatte, auf einem Image und da muss ich was verwechselt haben.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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