Ich habe mir etwas programmiert. Es ist möglich nur Zahlen und ein Komma einzugeben, und Prozedur springt bei Enter-Taste in das nächste Feld. Vielleicht kann der eine oder andere mal drüber gucken ob da ein Fehler erkennbar ist oder man es besser machen kann.
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
decPlaces = 2; //Anzahl Nachkommastellen
var
s: string;
p: Integer;
begin
s := TEdit(Sender).Text;
p := Pos(DecimalSeparator, s); //DecimalSeparator = Komma in DE
//Begrenzt Eingabe auf folgende Zeichen
if not (Key in ['0'..'9', DecimalSeparator, #8]) then // #8 = Backspace-Taste
Key := #0;
//WICHTIG: Diese Abfrage muss vorne stehen, sonst wird RETURN u. U. ignoriert.
//Schickt Fokus bei ENTER zum nächsten Element.
if Key = Chr(VK_RETURN) then //Wenn Return gedrückt wird...
begin
if s = '' then //Wenn Feld leer, dann vor dem Exit 0 eingeben.
Key := '0';
Self.Perform(WM_NEXTDLGCTL, 0, 0); //Springt zum nächsten Control
end;
//Lässt kein zweites Komma zu
if (p > 0) and (Key = DecimalSeparator) then
begin
Key := #0;
Exit;
end;
//Begrenzt die Eingabe auf z.B. zwei Nachkomma-Stellen
if (Key <> #8) then //Backspace-Taste zulassen
if (p > 0) then
if Length(s) >= (p + decPlaces) then
begin
Key := #0;
Exit;
end;
end;