Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Bedingungen unterschiedlicher Typen in einer IF Abfrage (https://www.delphipraxis.net/43825-2-bedingungen-unterschiedlicher-typen-einer-if-abfrage.html)

juergen 9. Apr 2005 10:48


2 Bedingungen unterschiedlicher Typen in einer IF Abfrage
 
Hallo zusammen!
ich möchte -ausgehend von einem Eingabefeld - den eingegebenen Wert auf 2 Bedingungen überprüfen.
Im Moment habe ich dafür 2 (!) If-Abfragen. Das hat allerdings zur Auswirkung, dass bei Erfüllung BEIDER Bedingungen auch 2 ShowMessages kommen....

Wie bekomme ich es nun hin, diese beiden Bedingungen in EINER Abfrage zu prüfen, jeweils mit der "passenden" Meldung?

Delphi-Quellcode:
IF length (lsMinute_b) > 2 then begin       //lsMinute_b --> String
Windows.Beep(2000,250) ;
ShowMessage ('Eingabe falsch! Die Anzahl der Stellen für die Minutenwerte hat mehr als 2 Stellen!');
OutputC.text := 'Eingabe falsch!';
end;

IF (liMinute_b) > 60 then begin     //liMinute_b --> Integer
Windows.Beep(2000,250) ;
ShowMessage ('Eingabe falsch! Der eingegebene Wert für die Minuten ist grösser 60!');
OutputC.text := 'Eingabe falsch!';
end;

Vielen Dank vorab!

Grüsse
Jürgen

SirThornberry 9. Apr 2005 10:51

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
ganz einfach
Delphi-Quellcode:
IF length (lsMinute_b) > 2 then
begin       //lsMinute_b --> String
  Windows.Beep(2000,250) ;
  ShowMessage('Eingabe falsch! Die Anzahl der Stellen für die Minutenwerte hat mehr als 2 Stellen!');
  OutputC.text := 'Eingabe falsch!';
end
else IF (liMinute_b) > 60 then
begin     //liMinute_b --> Integer
  Windows.Beep(2000,250) ;
  ShowMessage ('Eingabe falsch! Der eingegebene Wert für die Minuten ist grösser 60!');
  OutputC.text := 'Eingabe falsch!';
end;
damit prüfst du die zweite bedingung nur falls die erste nicht erfüllt ist

BenjaminH 9. Apr 2005 10:51

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
Du kannst mehrere Bedingungen mittels or oder and verbinden:
Delphi-Quellcode:
IF (length (lsMinute_b) > 2) or (liMinute_b > 60) then begin       //lsMinute_b --> String
Windows.Beep(2000,250) ;
ShowMessage ('Eingabe falsch! Die Anzahl der Stellen für die Minutenwerte hat mehr als 2 Stellen!');
OutputC.text := 'Eingabe falsch!';
end;
[edit=Ups]Ich hatte leider übersehen, das da verschiedene Sachen gemacht werden sollten, sorry :-([/edit]

SirThornberry 9. Apr 2005 10:52

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
@benjamin: so stimmt aber die fehlermeldung nicht mehr...

Ultimator 9. Apr 2005 10:52

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
Delphi-Quellcode:
if (length(lsMinute_b) > 2) or ((liMinute_b) > 60) then
 begin
 Windows.Beep(2000,250);
 if length(lsMinute_b) > 2 then
  ShowMessage('Eingabe falsch! Die Anzahl der Stellen für die Minutenwerte hat mehr als 2 Stellen!');
 if liMinute_b > 60 then
  ShowMessage('Eingabe falsch! Der eingegebene Wert für die Minuten ist grösser 60!');
 OutputC.text := 'Eingabe falsch!';
 end;
//edit Wo war die rote Warnmeldung? :|

juergen 9. Apr 2005 11:12

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
vielen Dank für die schnelle Hilfe!
@ SirThornberry --> genauso wollte ich es haben.

Allen ein schönes Wochenende!

Grüsse
Jürgen

Christian Seehase 9. Apr 2005 12:09

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
Moin Jürgen,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Fehlermeldungen schön und gut, aber warum verhinderst Du nicht einfach, dass falsche Eingaben gemacht werden können?

Garfield 9. Apr 2005 12:27

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
Delphi-Quellcode:
if (length(lsMinute_b) > 2) or ((liMinute_b) > 60) then
...
Auf Grund der Bedingungen nehme ich an, dass es auch eine Eingabe für Stunden gibt!?

Dann möchte ich darauf hinweisen, dass eine Stunde zwar 60 Minuten hat, aber in der Zeitangabe nur ganzzahlige Werte angegeben werden. Ein Minutenwert 60 ist eine Stunde und wird mit 1:00 angegeben.

Alternativ könnte man über das OnKeyPress-Ereignis des Edits die Eingabe sofort auswerten. Zum Beispiel bei Länge 0 (leeres Eingabefeld) nur die Ziffern 0 bis 5 zulassen und alle anderen Eingaben sind wirkungslos. Bei Länge 1 sind dann Rückschritt (Löschen 1. Ziffer) und die Ziffern 0..9 erlaubt und bei Länge 2 nur noch der Rückschritt. Eventuell kann man einen vorherigen Wert zwischenspeichern und über ESC wiederherstellen.

juergen 9. Apr 2005 14:35

Re: 2 Bedingungen unterschiedlicher Typen in einer IF Abfrag
 
@ Christian ,
danke für den Willkommensgruss!
Ich habe schon ein OnKeyPress-Ereignis für alle möglichen Eingabefehler hinterlegt, muss aber die Eingabe "aufteilen" in Stundenwerte und Minutenwerte. Nur somit habe ich die Möglichkeit "völlig unabhängig" die 4 Grundrechnenarten weiter auszuführen.
Mit meiner jetzigen Lösung bin ich nun eigentlich auch ganz zufrieden ;-)

Interessant wäre höchstens noch, ob man überhaupt eine Meldung herausgeben muss.
Im Moment bin ich noch der Ansicht, dass ich aufzeigen will WELCHER Eingabefehler vorliegt...

@ Garfield,
Du hast genau recht! Ich rechne mit Stunden und mit Minuten. Von daher ist der Wert "60" natürlich auch falsch. (es muss 59 sein)
Dein Denkansatz für das OnKeyPress-Ereignis hört sich auch gut an. Vielleicht probier ich das mal über diese Methode.

Grüsse
Jürgen


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