Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bug bei Auswertung: if (Zahl in [min..max]) then .. ?? (https://www.delphipraxis.net/201807-bug-bei-auswertung-if-zahl-%5Bmin-max%5D-then.html)

SearchBot 28. Aug 2019 11:52

Delphi-Version: 10.1 Berlin

Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Hallo,

ich habe gerade ein für mich unlogisches Problem (und ich kann nicht danach suchen, weil "in" und "if" zu kurz für die Suche sind).

Meine Situation im angehaltenen Programm:

Code:
xPos=527
yPos=98

xMin=238
xMax=709

yMin=26
yMax=551
Ich möchte, daß nur in einem Bereich eine Aktion erfolgt, also habe ich sie so eingeklammert:


Delphi-Quellcode:
if (xPos in [xMin..xMax]) and (yPos in [yMin..yMax]) then begin
//Code
end;

Obwohl die obigen Werte xPos und yPos genau in diesen Bereich passen und somit beide Abfragen aus meiner Sicht true sind, wird der Code übersprungen.:gruebel:

Prüfe ich die Werte im angehaltenen Zustand in der IDE und zeige mit der Maus auf yMax, zeigt mir der Hint "yMin..yMax | 26" an, statt den yMax-Wert; auch die Auswerte-Funktion kommt mit dem "Zahl in [a..b]" nicht klar.

Ist das ein Bug?
Muss ich das immer umständlich ausführlich schreiben (if (posX>=xMin) and (posX<=xMax) and...)? Oder gibt's da eine Syntax, die korrekt funktioniert, wie ich es gehofft hatte? :pale:

Jasocul 28. Aug 2019 12:37

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
"in" lässt in den Klammern nur 256 Werte zu.
Also 0..255 oder 100..355 etc.

stahli 28. Aug 2019 12:38

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Nutze InRange aus der Math-Unit...

Blup 28. Aug 2019 12:44

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
System.Types.PtInRect()

Michael II 28. Aug 2019 12:46

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Nutze ptInRect. Damit kannst du checken, ob ein Punkt innerhalb eines Rechtecks liegt.

Beispiele:

Delphi-Quellcode:
  showmessage( ptInRect( Rect( 238,26,709,551 ), Point( 240,30 ) ).ToInteger.ToString );
  showmessage( ptInRect( Rect( 238,26,709,551 ), Point( 229,400 ) ).ToInteger.ToString );

SearchBot 28. Aug 2019 13:23

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Ah cool.

Zitat:

Zitat von Jasocul (Beitrag 1443671)
"in" lässt in den Klammern nur 256 Werte zu.
Also 0..255 oder 100..355 etc.

Das hab ich nicht gewusst. Dankeschön.

Zitat:

Zitat von stahli (Beitrag 1443672)
Nutze InRange aus der Math-Unit...

Oh, das ist gut - ich sollte mich mehr mit dieser Unit beschäftigen :thumb:

Zitat:

Zitat von Michael II (Beitrag 1443674)
Nutze ptInRect. Damit kannst du checken, ob ein Punkt innerhalb eines Rechtecks liegt.

Auch für diesen Tipp möchte ich mich bedanken.

Heute habe ich wieder was dazu gelernt :dp:

p80286 29. Aug 2019 09:59

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Und warum nicht
Delphi-Quellcode:
if (xpos>=xmin) and (xpos<=xmax) then .......
Gruß
K-H

stifflersmom 29. Aug 2019 15:08

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Zitat:

Zitat von p80286 (Beitrag 1443803)
Und warum nicht
Delphi-Quellcode:
if (xpos>=xmin) and (xpos<=xmax) then .......
Gruß
K-H

Wäre ja möglich, dass die Vergleichswerte trotzdem gewisse Auflagen erfüllen müssen. So darf vielleicht xmin nur 112 oder 204 oder 314... sein

Dennis07 3. Sep 2019 18:00

AW: Bug bei Auswertung: if (Zahl in [min..max]) then .. ??
 
Oder du verwendest die CustomSets library. Die unterstützt Sets von jedem numerischen ganzzahligen Typen und nicht nur Byte.


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