Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen.
Und [Entf] und eventuell [-] und ...
Das ist ja das schöne an der Lösung, NumbersOnly erlaubt kein -, keinen Dezimalpunkt und auch kein + und die Fehlermeldung ist dann auch wieder da!
über on KeyDown hat man das größtenteils selber in der Hand...
Die einfachste Lösung um grundsätzliches Editieren zu erlauben sieht dann so aus:
Delphi-Quellcode:
Uses
Clipbrd;
Const
KEY_STRGV = #$16;
KEY_BACK = #8;
KEY_STRGC = #3;
KEY_STRGX = #$18;
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
Var
LBuffer: Array[0..100] Of Char;
Function IsValid(Const AStr: String): Boolean;
var
i: Integer;
begin
Result := TRUE;
for i := 1 to Length(AStr) do
begin
if Not CharInSet(AStr[i], ['0'..'9']) then
begin
Result := FALSE;
Break;
end;
end;
end;
begin
if Not CharInSet(Key, [#3,#8, #$16, #$18,'0'..'9']) then
Key := #0;
if Key = KEY_STRGV then
begin
If Not IsValid(Clipboard.AsText) Then
Key := #0;
end;
end;
Damit kann im Edit ausgeschnitten, eingefügt und gelöscht werden. Zusätzlich kann man dann auch jedes beliebige andere Zeichen erlauben...
Grundsäztlich kann man hier natürlich einfach ein TMaskEdit verwenden allerdings finde ich die Eingabe dort ziemlich unzumutbar.
Persönlich bevorzuge ich es, den Benutzer eingeben zu lassen was er möchte, wenn der das Feld dann verlässt (oder den Dialog schließt) wird er darauf hingewiesen das es ein Eingabeproblem gibt.
Das ist einfach umzusetzen und bringt auch im späteren Verlauf die wenigsten Probleme...