Oder eben ohne Komma-Abfrage, dafür funktioniert das aber auch, wenn der User Teile des Edit-Feldes markiert hat ...
Delphi-Quellcode:
unit NumericEditValidator;
interface
uses
Classes,
StdCtrls;
type
TNumericEditValidator =
class( TComponent )
protected
procedure EditKeyPress( Sender : TObject;
var Key : Char );
public
constructor Create( AOwner : TEdit );
reintroduce;
end;
implementation
uses
SysUtils;
{ TNumericEditValidator }
constructor TNumericEditValidator.Create( AOwner : TEdit );
begin
inherited Create( AOwner );
AOwner.OnKeyPress := EditKeyPress;
end;
procedure TNumericEditValidator.EditKeyPress( Sender : TObject;
var Key : Char );
var
LEdit : TEdit;
LNewText :
string;
LText1, LText2 :
string;
LValue : Extended;
begin
LEdit := Sender
as TEdit;
LText1 := Copy( LEdit.Text, 1, LEdit.SelStart );
LText2 := Copy( LEdit.Text, LEdit.SelStart + 1 + LEdit.SelLength );
if ( Key = #8 )
then
if LEdit.SelLength > 0
then
LNewText := LText1 + LText2
else
LNewText := Copy( LText1, 1, Length( LText1 ) - 1 ) + LText2
else
LNewText := LText1 + Key + LText2;
if ( LNewText <> '
' )
and not TryStrToFloat( LNewText, LValue )
then
Key := #0;
end;
end.
In deiner Form bindest du diese
unit ein und im FormCreate das hier
Delphi-Quellcode:
uses
NumericEditValidator;
procedure TForm1.FormCreate( Sender : TObject );
begin
TNumericEditValidator.Create( Edit1 );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)