ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1962
1962
EMPFEHLEN
-
05.11.07 23:56 #1
- Registriert seit
- Aug 2005
- Ort
- da wo der Hanf blüht
- Beiträge
- 125
In der Schule sollten wir ein Programm programmieren, was uns nach Eingabe eines Monats angibt, wie viele Tage dieser Monat hat.
Soweit kein Problem, nur könnte ja jemand bei der Eingabe auf die Idee kommen, statt einer Zahl zwischen 1 und 12 (da ein Jahr 12 Monate hat), irgendwelche Buchstabenkombinationen einzutippen, die prompt eine Fehlermeldung verursachen.
Nun habe ich mir folgende Prozedur ausgedacht:Funktioniert wunderbar, nur kenne ich es aus VisualBasic viel einfacher, indem man einfach eine Eingabe mit IsNumeric auf einen numerischen Wert überprüfte.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
procedure Tmonat_tage_form.Edit1Change(Sender: TObject); begin i := 0; while (inttostr(i) <> edit1.text) and (i < 12) do i := i + 1; if edit1.Text = inttostr(i) then begin monat := strtoint(edit1.text); case monat of 1,3,5,7,8,10,12: edit2.Text := '31'; 4,6,9,11: edit2.Text := '30'; 2: edit2.Text := '28 bzw. 29 im Schaltjahr'; end; end else edit2.text := ''; end;
Gibt es vielleicht auch einen ähnlichen Befehl in Delphi?
-
Jedes Edit hat ein Ereignis OnKeyPress, mit der du auch die gedrückte Taste auslesen kannst. Damit kannst du bei jedem Tastendruck überprüfen, welche Taste gedrückt wird, indem du den Parameter "Key" ausliest.
Andererseits könntest du auch mit try-except bzw try-finally arbeiten. Dadurch kann man schöne Fehlermeldungen ausgeben etc.
Andererseits könnte ich mir auch vorstellen, dass du "Monat" als String deklarierst und in der Case-Of-Verzweigung anstelle der Zahlen die entsprechenden Strings schreibst. Soweit ich weiß kannst du dann dahinter noch ein else setzen und damit eine Fehlermeldung ausgeben, wenn keiner der vorgegebenen Strings im Edit steht.
Vielleicht war ja die ein oder andere Anregung dabei.
Grüße
Hellie
-
13.11.07 00:20 #3
- Registriert seit
- Aug 2005
- Ort
- da wo der Hanf blüht
- Beiträge
- 125
Danke für deine Vorschläge. Eine einfache Funktion zur Überprüfung auf einen numerischen Wert bei Delphi gibt es also nicht? Denn:
- Jede Tastenausgabe auslesen und auf Zifferprüfen ist rechenaufwendig und viel zu umständlich.
- try-except und try-finally kenne ich nicht, müsstest du mir erläutern.
- monat als string deklarieren funktioniert nicht, da die Variablen bei der Case-Of-Anweisung ordinal sein müssen, das heißt jede Variable muss einen direkten Vor- und Nachfolger haben.
-
Hi!
Zu der Idee mit den Strings: Ja, sorry, da hast du natürlich Recht, mit Char geht es, aber mit String natürlich nicht.
Zu der Tastaturabfrage: Ich finde, das ist nicht wirklich rechenaufwendig, ich vermute sogar, der Aufwand, die Eingabe auf dem Monitor darzustellen ist wesentlich höher. Die Abfrage ist ein Zweizeiler, wenn man bei einer Bedingung den "then"-Teil in eine neue Zeile schreibt.
Zu try-finally/ try-except: Damit kannst du versuchen, ob ein bestimmter Quellcode einen Fehler produziert oder nicht. In den "try"-Block kannst du sämtliche Anweisungen schreiben, in denen Fehler auftreten können. Wenn du etwas anderes machen willst, was irgendwo ein Fehler auftritt, benutzt du try-except:Wenn du etwas nur machen willst, wenn kein Fehler entsteht, benutzt du try-finally:Code :1 2 3 4 5
try Anweisungsblock mit evtl. Fehler except Fehlermeldung end;
Code :1 2 3 4 5
try Anweisungsblock mit evtl. Fehler finally Anweisungsblock, der ausgeführt wird, wenn kein Fehler entstanden ist end;
Bei dir könnte es zB so aussehen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
procedure TForm1.Button1Click(Sender: TObject); var monat:integer; begin monat:=0; try monat:=Strtoint(edit1.text); edit2.text:= 'Bitte gültiges Datum eingeben'; //Bei Zahlen >12 oder <1, kann auch als else-Anweisung hinter dem case-of-stehen! case Monat of 1,3,5,7,8,10,12: edit2.Text := '31'; 4,6,9,11: edit2.Text := '30'; 2: edit2.Text := '28 bzw. 29 im Schaltjahr'; end; except edit2.text:='Bitte gültiges Datum eingeben!'; end; end;
-
18.11.07 17:13 #5
- Registriert seit
- Aug 2005
- Ort
- da wo der Hanf blüht
- Beiträge
- 125
Danke, try except ist ne schöne Sache.
Ähnliche Themen
-
Trennen von Text und Numerischen Zeichen über Makro
Von dibooo im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 21.12.06, 12:20 -
Sortierung einer JTable nach numerischen Spalten
Von Greq im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 10.11.06, 12:00 -
SWT: TextViewer mit ausschließlich numerischen Inhalt
Von testalucida im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 31.12.04, 11:08 -
Delphi7 lernen!
Von BlueFalcon im Forum Delphi, Kylix, PascalAntworten: 3Letzter Beitrag: 06.01.04, 21:28 -
Array nach numerischen und assoziativen Schlüsseln trennen
Von Neurodeamon im Forum PHPAntworten: 7Letzter Beitrag: 20.12.03, 19:57





Zitieren
Login





