procedure TFrm1._FloatChange1(Sender: TObject); begin if Sender is TCustomEdit then with TCustomEdit(Sender) do if (Text<>'-') and (Text<>'+') and (Text<>'') then if not TextToFloat(PChar(Text), t, fvCurrency) then begin Text:=Copy(Text, 1, Length(Text)-1); SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0); end; end;
var t: Currency;
TFrm1._FloatChange1是什麼啊?在字段的Change事件裡面執行嗎?
_FloatChange1是窗体Tfrm1的某一个事件啊。 一般放在控件的OnChange事件中procedure TFrm1._FloatChange1(Sender: TObject); begin if Sender is TCustomEdit then//控制TCustomEdit的子类,如TEdit, TDBEdit.... //如果你想用RTTI来控制或者读取的情况下,可以写更通用的,只是我没有写出来。 with TCustomEdit(Sender) do//控制TCustomEdit的子类 if (Text<>'-') and (Text<>'+') and (Text<>'') then//可以输入+,-等符号 if not TextToFloat(PChar(Text), t, fvCurrency) then //查看用入输入的是不是浮点型数据 begin Text:=Copy(Text, 1, Length(Text)-1); //如果用用输入的不是浮点型数据,就把用户输入的最后一个字符删掉, //再次会触发该事件,看剩下的字符数据是不是浮点型数, //如果是浮点型数就退出,否则继续把用户输入的最后一个字符去掉 //要加这一句代码重复触发该事件的理由:用户有可能是“粘贴”的数据!!! SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0); //把光标放到最后一个字符后。 end; end;//这样用户输入的一定就是浮点数了
procedure TForm1.DBEdit1Change(Sender: TObject); var t: Currency; begin if Sender is TCustomEdit then with TCustomEdit(Sender) do if (Text <> '-') and (Text <> '+') and (Text <> '') then if not TextToFloat(PChar(Text), t, fvCurrency) then begin Text := Copy(Text, 1, Length(Text) - 1); SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0); end; end;
begin
if Sender is TCustomEdit then
with TCustomEdit(Sender) do
if (Text<>'-') and (Text<>'+') and (Text<>'') then
if not TextToFloat(PChar(Text), t, fvCurrency) then
begin
Text:=Copy(Text, 1, Length(Text)-1);
SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0);
end;
end;
t: Currency;
一般放在控件的OnChange事件中procedure TFrm1._FloatChange1(Sender: TObject);
begin
if Sender is TCustomEdit then//控制TCustomEdit的子类,如TEdit, TDBEdit....
//如果你想用RTTI来控制或者读取的情况下,可以写更通用的,只是我没有写出来。
with TCustomEdit(Sender) do//控制TCustomEdit的子类
if (Text<>'-') and (Text<>'+') and (Text<>'') then//可以输入+,-等符号
if not TextToFloat(PChar(Text), t, fvCurrency) then
//查看用入输入的是不是浮点型数据
begin
Text:=Copy(Text, 1, Length(Text)-1);
//如果用用输入的不是浮点型数据,就把用户输入的最后一个字符删掉,
//再次会触发该事件,看剩下的字符数据是不是浮点型数,
//如果是浮点型数就退出,否则继续把用户输入的最后一个字符去掉
//要加这一句代码重复触发该事件的理由:用户有可能是“粘贴”的数据!!!
SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0);
//把光标放到最后一个字符后。 end;
end;//这样用户输入的一定就是浮点数了
var
t: Currency;
begin
if Sender is TCustomEdit then
with TCustomEdit(Sender) do
if (Text <> '-') and (Text <> '+') and (Text <> '') then
if not TextToFloat(PChar(Text), t, fvCurrency) then
begin
Text := Copy(Text, 1, Length(Text) - 1);
SendMessage(TCustomEdit(Sender).Handle, WM_KEYDOWN, VK_END, 0);
end;
end;
何必这么复杂!
你可以把字段改为字符型的,然后在感知控件的keypress事件限制允许输入的字符,以后如果希望只输入整型的,把keypress事件里面的限制语句改一下就行了。
仅供参考。
if not (key in['0'..'9',#8..#10,#37..#40,#13,'.']) then
key:=#0;