怎么限制文本框内只能输入数字,特别是带小数点的数值不出错

如何限制文本框内只能输入数字,特别是带小数点的数值不出错
问题同题目

------解决方案--------------------
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
begin
while True do
begin
if Key=#13 then
Exit;
if Key=#8 then
Exit;
if (Pos( '- ',TEdit(Sender).Text)> 0) and (Pos( '- ',TEdit(Sender).SelText)=0) and (TEdit(Sender).SelStart=0) then
break;
if Key in [( '- '),( '. '), '0 '.. '9 '] then
begin
if (Key=( '- ')) and (((Pos( '- ',TEdit(Sender).Text)> 0) and (Pos( '- ',TEdit(Sender).SelText)=0)) or (TEdit(Sender).SelStart <> 0))then
break;
if (Key=( '. ')) and (Pos( '. ',TEdit(Sender).Text)> 0) then
if (Pos( '. ',TEdit(Sender).SelText)=0) then
break;
Exit;
end;
break;
end;
Key:=#0;
end;
------解决方案--------------------
僵个有理,不过在使用前判断是否可转化为数值是必要的。
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=#$8) or (key=#$9) or (key=#$D) or (key=#$A) then exit;
//如果需要小数点 或符号,分两步只为了方便阅读
if (key= '. ') or (key= '+ ') or (key= '- ') then exit;
if (Key < '0 ' or Key> '9 ') and (key <> '. ') then Key=#0;
end;

在使用时
var intval:integer;
begin
if not trystrtoint(edit1.text,intval) then
begin
//格式不对提示
exit;
end;
//......
end;

另外,delphi自带maskedit控件可以完成一半输入格式限制,但不灵活,并且不能很好处理中文输入。