![]() |
Bereichsprüfung, aber wie?
Hallo,
ich verzweifle gerade an der Bereichsprüfung. Es kommt immer die Fehlermeldung "Fehler bei Bereichsprüfung". Bei folgendem Programmausschnitt haben ScanDPI den Wert 200 und Tolerance dern Wert 0:
Delphi-Quellcode:
Ich habe das ganze mal im Kleinen versucht. Der folgende Code bringt keinerlei Fehlermeldung:
Var
Hoehe,HMin,HMax : Integer; ... // Idealmaß ermitteln Hoehe:=Round(ScanDPI * 11.7); Breite:=Round(ScanDPI * 8.3); // Toleranzfaktoren ermitteln Case Tolerance Of 0 : Begin // bis 70 % größer oder kleiner werden tolleriert HMin:=Round(0.7*Hoehe); HMax:=Round(1.3*Hoehe); BMin:=Round(0.7*Breite); BMax:=round(1.3*Breite); End; 1 : Begin // bis 80 % ... HMin:=Round(0.8*Hoehe); HMax:=Round(1.2*Hoehe); BMin:=Round(0.8*Breite); BMax:=round(1.2*Breite); End; 2 : Begin // bis 90 % ... HMin:=Round(0.9*Hoehe); HMax:=Round(1.1*Hoehe); BMin:=Round(0.9*Breite); BMax:=round(1.1*Breite); End; 3 : Begin // alles was abweicht an DINA4 bei angegebener DPI HMin:=Hoehe; HMax:=Hoehe; BMin:=Breite; BMax:=Breite; End; End; // Case Tolerance Of // Werte des Bildes ermitteln Hoehe:=Image1.Picture.Bitmap.Height; Breite:=Image1.Picture.Bitmap.Width; // Alles anzeigen ShowMessage(IntToStr(Hoehe)+'x'+IntToStr(Breite)+#13+ IntToStr(HMin)+ 'x'+IntToStr(BMin)+#13+ IntToStr(HMax)+ 'x'+IntToStr(BMax)); If Hoehe In [HMin..HMax] Then ShowMessage('drin') Else ShowMessage('nicht drin');
Delphi-Quellcode:
Eventuell bin ich völlig betriebsblind. Aber ich sehe den Unterschied nicht.
Procedure Bereichspruefung;
Var Hoehe,HMin,HMax : Integer; Begin Hoehe:=Round(200 * 11.7); // Pixelhöhe von DINA4 bei 200 dpi HMin:=Round(0.7 * Hoehe); HMax:=Round(1.3 * Hoehe); Hoehe:=Image1.Picture.Bitmap.Height; If Hoehe In [HMin..HMax] Then ShowMessage('Ist drin.') Else ShowMessage('Ist nicht drin.'); End; Was mache ich verkehrt? |
Re: Bereichsprüfung, aber wie?
Hi :-)
Der IN operator geht nur von 0..255. In deinem Testbeispiel müsste es eigentlich auch zu dem Fehler kommen. Vermutlich hast du unter den Compiler-Optionen die Bereichsprüfung ausgeschaltet. Formulier es zu einem if (Hoehe>=HMin) and (Hoehe<=Hmax) then um und gut ist Gruß Hudel |
Re: Bereichsprüfung, aber wie?
Zitat:
Wäre mir neu! Der IN Operator prüft nur ob ein Element a Teil einer Menge [x..y] ist, dabei kann die Menge aus Integers oder Strings oder sonstwas bestehen.... |
Re: Bereichsprüfung, aber wie?
Zitat:
|
Re: Bereichsprüfung, aber wie?
Zitat:
|
Re: Bereichsprüfung, aber wie?
Zitat:
Delphi-Quellcode:
if InRange(Hoehe, HMin, HMax) then
|
Re: Bereichsprüfung, aber wie?
Zitat:
Zitat:
|
Re: Bereichsprüfung, aber wie?
Zitat:
Zitat:
Ich habe es jetzt erstmal wie Hudel1965 gemacht. Aus zwei Grüden: Ich frage nicht nur die Hoehe, sondern auch die Breite ab. Und außerdem muss jedesmal ein Not davorstehen, weil ich nur dann in die If-Alternative springen möchte, wenn die Größe gerade nicht passt. Da sieht mir
Delphi-Quellcode:
einfacher aus.
If (Hoehe<HMin) Or (Hoehe>HMax) Or (Breite<BMin) Or (Breite>BMax) Then
... Außerdem muss ich die Unit Math noch mit einbinden, was mich zu einer allgemeinen Frage führt: Mein Programm soll möchlichst im Hintergrund laufen und schön klein bleiben. Kommt eine weitere Unit dazu, dann wird das Programm (auf der Festplatte) größer und es braucht mehr RAM, oder? Sollte das nicht der Fall sein, würde ich InRange nehmen, wenn es mir einen Geschwindigkeitsvorteil bringt... Ich werde mir die Routine aber für die Zukunft vormerken. Gruß, Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 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