Ich kapiers einfach nicht kann ich nicht machen das nur zahlen eigeben kann anderes wir ignoriert bitte um erklärung mit Code.
Ich hätte dazu nur die idee OnKeyPress
Wenn Du die Idee schon hast...
aber dann will ich mal nicht so sein
[edit] Arrgh, wieso hab' ich die zweite Hälfte des Posts von
verwirrt übersehen? Da steht ja schon alles drin...[/edit]
Delphi-Quellcode:
procedure frmMain.edPortKeyPress(Sender: TObject; var Key: Char);
begin
if not CharInSet(Key, [#8, #48..#57]) then
// if not (Key in [#8, #48..#57]) then //<-- auf älteren Systemen, in denen CharInSet noch nicht existiert *
Key := #0;
end;
*
“in” is dead, long live “CharInSet” (or maybe not)
Dieser Code verhindert, dass beim Tastendrücken andere tasten als Backspace und die Ziffern 1..0 "verwendet werden können".
Die Variable "key" enthält dabei den
ASCII Code der Taste, die gedrückt wurde, und die eben an den Text, der schon im Edit-Feld steht, angehängt werden soll.
Wir sagen jetzt einfach: Wenn dieser
ASCII Code nicht der von BACKSPACE (damit wir Fehleingaben wieder löschen können) oder der der Ziffern 1..0 ist, dann soll der Tastencode eben #0 (oder "nichts") sein.
Dieser Code alleine hat aber (mindestens) einen gravierenden Nachteil: Es ist immer noch möglich über Copy/Paste Buchstaben oder andere unerwünschte Zeichen in das Edit-Feld zu werfen.
Und dann knallt es, wenn man über
StrToInt(edPort.Text)
den Edit-Inhalt in eine Zahl umwandeln will.
Von daher ist der
geheimnisumwitterte Vorschlag schon richtig, eine (zusätzliche) Überprüfung in das OnExit Event des Edits zu schreiben:
Delphi-Quellcode:
procedure frmMain.edPortExit(Sender: TObject);
var temp : Integer;
begin
if not TryStrToInt(edPort.Text, temp) then
(sender as TEdit).setFocus;
end;
Wenn also das edit-Feld verlassen wird (den Focus verlieren soll ???), dann wird geprüft, ob sich die Zahl ohne Probleme in einen Integer umwandeln lässt. Wenn das nicht der Fall ist, wenn also TryStrToInt False zurückgibt, wird der Focus wieder auf das EditFeld gesetzt.
Mit anderen Worten, solange kein "gültiger" Inhalt im edit-feld steht, kann dasselbe nicht verlassen werden.
Die Überprüfung im OnExit ist von daher schön, weil man im weiteren Verlauf des Programms praktisch sicher sein kann, dass nur "gültige" Daten (also nur Zahlen) im Edit stehen.
Unbedingt nötig ist keine der beiden Methoden, da man auch selbst im Code bei jeder Umwandlung über TryStrToInt oder StrToIntDef prüfen kann, aber etwas einfacher ist es schon
P.S. @
Geheimniskrämer: Sowas, edit.NumbersOnly kannte ich noch nicht, wieder was gelernt. Danke dafür!
P.P.S. @MisterC: Sorry, aber das muss ich mal sagen: Ich habe Deinen Post dreimal lesen müssen, bis ich verstanden habe, was Du willst...