Вообще, я, например, обычно проверяю в KeyPress
Код:
procedure TForm1.Edit1KeyPress(Sender : Tobject; var Key : Char);
begin
If Not (Key In ['0'..'9','.',#8,#13,'-'])
Then Key := #0
Else
Begin
If (Key = '.') And (Pos('.',Edit1.Text) > 0) Then Key := #0;
If (Key = '-') And (Pos('-',Edit1.Text) > 0) Then Key := #0;
If (Key = '-') And (Edit1.SelStart <> 1) Then Key := #0;
End;
end;
Как-то так...