![]() |
Re: if-Abfrage vereinfachen
Zitat:
Delphi-Quellcode:
FImageEnVect.Bitmap.Canvas.Pen.Mode := TPenMode(integer((not Show)) * (integer(pmNotXor) - integer(pmBlack)) + integer(pmBlack));
|
Re: if-Abfrage vereinfachen
verwendet pixels überhaupt den PenMode? ... mal googeln
[edit]ok, verwendets Aber mal eine andere Frage, was sollte den die Funktion genau machen? du zeichnest einmal direkt schwarz drauf und einmal mit XOR ... ist irgendwie unlogisch für mich, entweder immer per schwarz, wenn das raster auf eine leere fläche gezeichnet wird, oder immer per XOR, wenn das raster über bestehende Grafik gezeichnet wird, und mit einem 2ten xor dann wieder wegmalen das Raster. |
Re: if-Abfrage vereinfachen
Ein bischen OT, aber die Funktion ist falsch unterteilt.
DrawDots sollte nicht in eine lokale Funktion ausgelagert werden, da es ja das eigentliche Herzstueck der Methode ist. Der Pen.Mode hat uebrigens nicht den geringsten Einfluss auf das Setzen der Pixel. Der Pen ist fuer das Zeichnen von Linien verantwortlich. Was soll uebrigens das Update bewirken? Ist hier das TDWFotoBook.Update gemeint oder FImageEnVect.Update? Schmeiss das with raus, da es nur Probleme bereitet, aber nicht zur Lesbarkeit beitraegt. Nachgeprueft an der TCanvas-Implementierung: Es wird Windows.SetPixel aufgerufen das nach Windows-Hilfe keinen Pen.Mode beruecksichtigt. |
Re: if-Abfrage vereinfachen
Moin Michael,
also ich würde die "Abfrage" so machen:
Delphi-Quellcode:
const
_aPenMode : array [boolean] of TPenMode = (pmNotXor,pmBlack); FImageEnVect.Bitmap.Canvas.Pen.Mode := _aPenMode[FShow]; |
Re: if-Abfrage vereinfachen
;) Erinnert mich daran, dass ich solche bool'schen Arrays immer gern eingesetzt habe, weil ich auf die C-Variante
Code:
neidisch war. Ich glaube, der Gedanke mit dem Array kam von Hagen. Die Variante hätte den Vorteil, dass man anstelle von "pmBlack" auch was anderes nehmen könnte. Diese
Pen.Mode = (Show)?pmBlack:pmNotXor; // fiktiver Code
![]() |
Re: if-Abfrage vereinfachen
Zitat:
|
Re: if-Abfrage vereinfachen
Eigentlich ja. Ich kann mir nicht vorstellen das Microsoft das zu dokumentieren vergessen haette wenn der Mode Einfluss auf SetPixel haette.
Es macht ja auch keinen Sinn, da der Pen nur zum Zeichnen von Linien zustaendig ist. |
Re: if-Abfrage vereinfachen
Wenn TPen.Mode keinen Einfluss auf SetPixel hat, warum werden sie dann einmal gemalt und einmal nicht?
Sinn ist der: Ich habe ein Grid zum Ausrichten von Objekten. Dieses soll man anzeigen und nicht nazeigen können. Wenn es angezeigt wird, muss ich es eben entsprechend übermalen, um es wieder verschwiden zu lassen. Dabei kann der Hintergrund jede beliebige Frabe an jeder beliebigen Stelle haben. |
Re: if-Abfrage vereinfachen
Zitat:
also erstes mal mit clBlack und Xor malen -> Grid ist da, zweites mal mit clBlack und Xor malen -> Grid ist weg, das wäre ja der sinn von den xor sachen beim malen. @Robert: ich war auch der meinung, das es keinen einfluß hat, und auch wenns ms nicht dokumentiert hat, es hat einen einfluß, habs extra vorher noch getestet. |
Re: if-Abfrage vereinfachen
pmBlack ist Unsinn. Es bedeutet das immer mit Schwarz gemalt wird, egal was fuer eine Farbe man nimmt. Bitte ausprobieren ob mit einer anderen Farbe als clBlack die andere Farbe benutzt wird oder Schwarz. Andere Farbe heisst das der Pen.Mode keinen Einfluss hat.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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