tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1962
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DarkSean DarkSean ist offline Mitglied Gold
    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:
    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;
    Funktioniert wunderbar, nur kenne ich es aus VisualBasic viel einfacher, indem man einfach eine Eingabe mit IsNumeric auf einen numerischen Wert überprüfte.
    Gibt es vielleicht auch einen ähnlichen Befehl in Delphi?
     

  2. #2
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  3. #3
    DarkSean DarkSean ist offline Mitglied Gold
    Registriert seit
    Aug 2005
    Ort
    da wo der Hanf blüht
    Beiträge
    125
    Zitat Zitat von Hellie Beitrag anzeigen
    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
    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.
     

  4. #4
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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:
    Code :
    1
    2
    3
    4
    5
    
    try 
    Anweisungsblock mit evtl. Fehler 
    except 
    Fehlermeldung
    end;
    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
    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;
     

  5. #5
    DarkSean DarkSean ist offline Mitglied Gold
    Registriert seit
    Aug 2005
    Ort
    da wo der Hanf blüht
    Beiträge
    125
    Danke, try except ist ne schöne Sache.
     

Ähnliche Themen

  1. Trennen von Text und Numerischen Zeichen über Makro
    Von dibooo im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 21.12.06, 12:20
  2. Sortierung einer JTable nach numerischen Spalten
    Von Greq im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 10.11.06, 12:00
  3. SWT: TextViewer mit ausschließlich numerischen Inhalt
    Von testalucida im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 31.12.04, 11:08
  4. Delphi7 lernen!
    Von BlueFalcon im Forum Delphi, Kylix, Pascal
    Antworten: 3
    Letzter Beitrag: 06.01.04, 21:28
  5. Antworten: 7
    Letzter Beitrag: 20.12.03, 19:57