Nur Zahleneingaben zulassen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
In bestimmten Fällen kann es sinnvoll sein, in einem Edit-Feld nur numerische Angaben zu erlauben. Es gibt unterschiedliche Ansatzpunkte.Häufig sieht man folgende Lösung, die in OnKeyPress-Ereignis des TEdits geschrieben wird und nur Zahlen zwischen 0 und 9 inkl. der Backspace-Taste zulässt:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', Char(VK_BACK)]) then
Key := #0;
end;
Es ist allerdings immer noch möglich über die Zwischenablage (Kontextmenü) nicht-numerische Zeichen einzugeben.Je nach Bedarf können der Menge auch noch andere Zeichen hinzugefügt werden, wie z.B. ein Tausendertrennzeichen oder einem Dezimaltrenner (Zeichen zwischen dem ganzzahligen und fraktionalen Teil einer Zahl):
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', DecimalSeparator, ThousandSeparator, Char(VK_BACK)]) then
Key := #0;
end;
Dabei ist auch nicht garantiert, ob der Anwender das Dezimaltrennzeichen mehrmals oder an falscher Stelle einsetzt.Alternativ können Sie den Windows-Style des Edit-Feldes neu setzen, so dass es nur noch Zahlen zulässt. Die o.g. Probleme sind allerdings ähnlich:
procedure TForm1.Button1Click(Sender: TObject);
var
Style: DWord;
begin
Style := GetWindowLong(Edit1.Handle, GWL_STYLE);
SetWindowLong(Edit1.Handle, GWL_STYLE, Style or ES_NUMBER);
end;
Bei heutiger Rechnerleistung stellt es auch kein Problem mehr dar, bei jeder Eingabe den kompletten Inhalt des Feldes zu prüfen und dem Anwender beispielsweise durch Signalfarben deutlich zu machen, dass er noch keinen eindeutigen Wert angegeben hat. Hier ist das OnChange-Ereignis der richtige Ansatzpunkt:
procedure TForm1.Edit1Change(Sender: TObject);
var
Error: Integer;
Dummy: Integer;
begin
val(Trim(Edit1.Text), Dummy, Error);
if Error<>0 then
Edit1.Color:=clRed
else
Edit1.Color:=clWindow;
end;
Letztendlich sollte der Wert, bevor mit ihm weitergearbeitet wird, nochmals vom Programmierer verifiziert werden, um sicherzustellen, dass ein richtiger Wert eingegeben wurde.
- Lottozahlen generieren
- Umrechnung in verschiedene Zahlensysteme
- Eingabelänge eines TEdit beschränken
- Blinkenden Cursor verstecken
- Inhalt eines Edit-Feldes speichern
- Rückgängig/Wiederherstellen für Textfelder
- Beep-Signal in TEdit unterdrücken
- Primzahlen erkennen
- Zahlen mit beliebiger Genauigkeit dividieren
- Quersumme errechnen