Announcement

Collapse
No announcement yet.

Zahleneingabe erzwingen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zahleneingabe erzwingen

    Hallo miteinander, ist wahrscheinlich ein einfaches Problem, aber wie kann ich in einem Edit-Feld eine reine Zahleneingabe erzwingen und diese dann auch noch auf einen bestimmten Wert begrenzen (z.B. soll die Zahl nicht größer als 100 sein). Vielen Dank im vorraus!

  • #2
    Hallo Marc,
    ich habe mir bisher immer so geholfen, aber mich würde natürlich auch interessieren, ob´s eine einfachere Möglichkeit gibt:
    <pre>
    procedure TForm1.Edit1Change(Sender: TObject);
    var
    &nbsp;&nbsp;x : integer;
    begin
    &nbsp;&nbsp;try
    &nbsp;&nbsp;&nbsp;&nbsp;x := strtoint(Edit1.Text); if(x > 100) then Edit1.Text := inttostr(defaultwert);
    &nbsp;&nbsp;except
    &nbsp;&nbsp;&nbsp;&nbsp;on EConvertError do Edit1.Text := inttostr(defaultwert);
    &nbsp;&nbsp;end;
    end;
    </pre>

    Diese Funktion fügst du bei der Eigenschaft "onChange" ein (im Prinzip reicht ein Doppelklick auf das Editfeld). Der Sinn ist der, dass versucht wird, den angegebenen Wert als Zahl zu lesen. Klappt das nicht, wird eine Exception ausgelöst, die du wie zu sehen abfängst indem du den "defaultwert" in das Feld schreibst. Ansonsten: wenn es eine Zahl ist, bleibt nur die Kontrolle ob sie größer als 100 ist.

    Mathias

    Comment


    • #3
      Hallo,

      schaut euch doch mal auf der TabPage "Beispiele" das TSpinEdit an. Das macht genau das gewünschte und bietet obendrein die Möglichkeit der Eingabe per Maus.

      Gruß Fal
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Hallo,
        meine Variante der Begrenzung auf Ziffern ist recht einfach und <u>sicher</u>:
        <pre>procedure TForm1.FormCreate(Sender: TObject);
        var
        dwStyle: DWORD;
        hEdit: Integer;
        begin
        hEdit := Edit1.Handle;

        dwStyle := GetWindowLong(hEdit, GWL_STYLE);
        dwStyle := dwStyle or ES_NUMBER;
        SetWindowLong(hEdit, GWL_STYLE, dwStyle);

        SendMessage(hEdit, EM_SETLIMITTEXT, 3, 0);
        end;</pre><p>
        Auf ähnliche Weise lässt sich leider kein Höchstwert definieren.<p>Bleibt die Frage, ob das sinnvoll ist. Ich persönliche verwende solche Eingabefelder meist nur in separaten Einstellungsdialogen, deren Eingabefelder vor dem Schließen des Dialogs auf korrekten Inhalt überprüft werden. Ist ein inkorrekter Wert vorhanden, gibt's einen MessageDlg, ich setze den Focus auf das Edit mit falschem Inhalt und breche das Schließen des Dialogs ab.
        Oft kann eine einfache, erklärende Fehlermeldung informativer sein, als die absolute Begrenzung, wobei sich der Anwender nur wundert, "Wieso kann ich das so nicht eingeben?".<p>Der Boti lässt grüße

        Comment

        Working...
        X