![]() |
if-Abfrage vereinfachen
Ich habe hier eine ziemlich grausame if-Abfrage. Kann man die eventuell vereinfachen?
Delphi-Quellcode:
if (Show and not FShowGrid) or (Show and FShowGrid) then
begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack; end else if (FShowGrid and not Show) or (not FShowGrid and not Show) then begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor; end; |
Re: if-Abfrage vereinfachen
ist doch :
Delphi-Quellcode:
... oder hab ich da was falsch interpretiert ?
if Show then
begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack; end else begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor; end; |
Re: if-Abfrage vereinfachen
Wie wäre es damit
Delphi-Quellcode:
Edit: Semikolon gelöscht :-)
if Show then
FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack else FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor; |
Re: if-Abfrage vereinfachen
Zitat:
evtl sogar noch n tick kürzer:
Delphi-Quellcode:
EDIT: zu langsam :/
if Show
then FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack; else FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor; EDIT2: Aber irgendwie verwundert mich diese Frage (von Luckie) |
Re: if-Abfrage vereinfachen
Das spielt doch keine Rolle, ob du zu langsam warst oder nicht. Wichtig ist, dass es klappt. :thumb: Es ist zwar off-topic, aber wenn ich mir die Ausgangslage angucke und mit dem Ergebnis vergleiche ... :lol: ... ich sehe schon einen Artikel vor mir:
Zitat:
|
Re: if-Abfrage vereinfachen
Zitat:
|
Re: if-Abfrage vereinfachen
Die Bedingung ist aber recht eindeutig, Micha:
Delphi-Quellcode:
FShowGrid kann TRUE oder FALSE sein, Show ist dagegen immer TRUE. Und anders herum:
if (Show and not FShowGrid) or (Show and FShowGrid) then
Delphi-Quellcode:
Show ist grundsätzlich FALSE, und FShowGrid kann wieder TRUE oder FALSE sein. Wie du ja selbst gemerkt hast, kannst du die Bedingung auf Show kürzen und FShowGrid komplett wegfallen lassen. Es wäre dann natürlich interessant, ob das Fehlverhalten immer noch auftritt, und ob es überhaupt mit der Bedingung zu tun hat.
else if (FShowGrid and not Show) or (not FShowGrid and not Show)
|
Re: if-Abfrage vereinfachen
wäre sogar noch kürzer ;) (aber nicht wirklich gut lesbar ... )
Delphi-Quellcode:
FImageEnVect.Bitmap.Canvas.Pen.Mode := TPenMode(integer(not Show) * integer(pmNotXor));
|
Re: if-Abfrage vereinfachen
:thumb: Ich habe leider kein Delphi zum Prüfen, aber der numerische Wert von "pmBlack" ist dann wohl Null? Ja, ist er, wie eine Google-Suche zeigt. ;)
|
Re: if-Abfrage vereinfachen
Ok, hier mal die die vollständige Routine:
Delphi-Quellcode:
procedure TDWFotoBook.PaintGrid(Show: Boolean = True);
procedure DrawDots; var i : Integer; j : Integer; begin with FImageEnVect do begin // draw dots for i := 0 to Width div FGridWidth do begin for j := 0 to Height div FGridWidth do begin Bitmap.Canvas.Pixels[i * FGridWidth, j * FGridWidth] := clBlack; end; end; Update; end; end; begin Assert(Assigned(ImageEnVect), IENIL); // deselect all layers, otherwise we would draw on the selected layer FImageEnVect.LayersCurrent := 0; // set pen mode if (Show and not FShowGrid) or (Show and FShowGrid) then begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmBlack; end else if (FShowGrid and not Show) or (not FShowGrid and not Show) then begin FImageEnVect.Bitmap.Canvas.Pen.Mode := pmNotXor; end; DrawDots; Self.FShowGrid := Show; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz