Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pen.Mode pmNotXor (https://www.delphipraxis.net/3483-pen-mode-pmnotxor.html)

Mali 15. Mär 2003 13:12


Pen.Mode pmNotXor
 
Hi!
Ich bin ein armer Schüler, der vom Lehrer zu wenig Hilfen bekommen hat! :( :wink: Wir sollen ein Malprogramm erstellen. Eigentlich ist das ja recht einfach. Wir benutzen dabei die Komponete TImage als Canvas. Jetzt hab ich ein Problem:
Wenn man eine Linie zieht dann soll diese bei jeder Mausbewegung aktualliesiert werden. Das bedeutet ich ziehe eine weiße Linie vom alten Standpunkt aus wieder zurück zum Ausgangspunkt und dann wieder zur Maus. Wenn sich jetzt zwei Linien überschneiden, dann wird aber auch dort die zweite Linie gelöscht. Um das zu beheben, hat uns der Lehrer gesagt, sollten wir PmNotXor beim Pen.Mode benutzen. Ich komm damit aber nicht wirklich zurecht und die Hilfe von Delphi verstehe ich nicht. :cry:
Ich hoffe man versteht mein Problem und einer da draußen im WWW hat erbarmen mit mir und hilft mir.
See you
Mali

DennyC 15. Mär 2003 20:06

Hallo Mali,

der Hinweis Deines IT-Pädagogen ist mathematisch betrachtet gar nicht so übel, technisch gesehen aber eher mittelmäßig. Vereinfacht dargestellt heißt das: Wenn Du den Pen in Deinem Zeichenprogramm auf pmNotXor setzt, wird an den Stellen, an denen Deine Linie entlangführt, das Bild so was ähnliches wie Pixel für Pixel invertiert, wie ein Negativ eines Fotos. Sagen wir, Du ziehst eine Linie auf weißem Hintergrund und kreuzt dabei bereits vorher gezeichnete schwarze Linien. Die neue Linie wird schwarz dargestellt - außer an den Kreuzungsstellen mit den vorhandenen Linien. Die werden zu weißen Schnittpunkten. Und jetzt der Clou: Solltest Du Dich für eine anderen Endpunkt Deiner Linie entscheiden, wird zunächst die alte Linie mit dem alten nicht mehr gewünschten Endpunkt einfach nochmal gezeichnet, also nochmal "invertiert" - alles schwarze wird wieder weiß, alles weiße wieder schwarz, so wie vorher, es hat sich nichts verändert. Anschließend wird die Linie mit dem neuen Endpunkt gezeichnet. Also: Minus mal Minus ergibt Plus - gilt auch hier. Sollte der richtige Endpunkt gefunden worden sein, zeichnest Du die neue Linie einfach mit dem PenMode pmCopy, dann ist sie fest im Bild integriert. Hab ich jetzt zuviel verraten? :?

Ansonsten sei noch bemerkt: TImage eignet sich nicht für ein Zeichenprogramm, ist nur zum Ansehen gedacht. Eine Komponente wie TPaintBox und auch TCanvas (direkt auf der Form zum Beispiel) klingt doch schon viel eher nach Zeichnen, oder? Und das Zeichnen mittels pmNotXor ist auch out. Halte Dir beim Zeichnen lieber eine zweite nicht sichtbare Zeichenfläche im Hintergrund, die Du vor jeder temporären Zeichenaktion anzeigst und dann erst drauf malst. Mit dem Stichwort BackBuffer wird das ganze sogar noch flackerfrei, was Dir sonst nur schwerlich gelingen wird.

Auch wenn Dich das alles noch mehr verwirrt haben wird... Ans Werk!

Denny

Mali 15. Mär 2003 21:20

Hi Denny!
Also ermal ein großes Lob, du kannst echt gut erklären! :hello:
Dank deiner Erklärung hab ich meinen Fehler gefunden. Danke! Jetzt kann ich endlcih weiter programmieren. :coder:
Achja du brauchst keine gewissens Bisse haben. :wink: Ich hab meinen Fehler selbst gefunden das Programm selbst gemacht. Du hast mir dabei "nur" geholfen (was auf keinen Fall zu verachten ist). Also vielen Dank!
See you
Martin

P.S:Ich glaub das mit der Komponente TImage is eine Make von meinem Lehrer. Hab auch schon beim Suchen nach einer Antwort auf mein Problem gelesen, dass die sich dafür nicht eigent. Tja man kanns nicht ändern. Du kennst ja Lehrer :wink:


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