Hallo,
mein Favorit ist das Ereignis OnChange in Verbindung mit OnEnter,
weil
1. eine Tastenüberprüfung das Kontextmenü sowie Strg+V und Umschalt+Insert nicht berücksichtigen kann, bzw letztendlich die Funktionalität unterbindet
2. das Setzen von ES_NUMBER das Einfügen von Text über die Zwischenablage nicht verhindert.
So verhindere ich falsche Eingaben:
Delphi-Quellcode:
//...
sUndo :
String;
//...
procedure TForm1.Edit1Change(Sender: TObject);
var PosCur : Integer;
s :
string;
i : Integer;
const MAX = 999;
MIN = 200;
begin
try
s := Edit1.Text;
if s = '
'
then
exit;
PosCur := Edit1.SelStart;
//falls Fehler, merken
i := StrToInt(s);
//Wenn Fehler dann >> except
//Wenn
if (s[1] = '
-')
or
(i > MAX)
or
((Length(s) = 3)
and (i < MIN))
then
raise Exception.Create('
');
//Exception auslösen >> except
sUndo := Edit1.Text;
except
showmessage('
Nur Werte zwischen '+IntToStr(MIN)+'
und '+IntToStr(MAX)+'
erlaubt!');
Edit1.Text := sUndo;
//Edit zurücksetzen
if Length(s) > Length(sUndo)
then
PosCur := PosCur-1;
end;
Edit1.SelStart := PosCur;
//Cursor an alte Position setzen
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
sUndo := Edit1.Text;
//wird in OnChange benötigt
end;