想实现TEdit录入的限制(只能输入数字,小数点位数限制,自动前补0等等)(100分)

  • 主题发起人 主题发起人 iwantflywithwin
  • 开始时间 开始时间
I

iwantflywithwin

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现TEdit录入的限制,大体想了一下有这么几个,当然还可以在扩展:
1.只能输入字符或只能输入数字
2.可以输入浮点类型,能够限制小数点的位数,不足的补零或不(可选),前面补零或不。
先有的的控件好像不能实现,自己做却有没做过,请高手指点一二,谢谢。
 
给你个函数:
//EditType为限制的类型:1-任意输入;2-整数输入;3-浮点输入;
//Digits:小数位数
procedure FormatKeyPress(Text:string;SelStart,SelLength:integer;
var Key:Char;EditType:integer;Digits:integer);
begin
if (Key=#27) or (Key=#8) or (EditType=1) then exit;
if EditType=2 then
if not (Key in ['0'..'9','+','-'] ) then Key:=#0;
if EditType=3 then
if not (Key in ['0'..'9','+','-','.'] ) then Key:=#0;
//控制+-
if (Key ='-') or (Key='+' ) then
begin
if ((Pos('-',Text) > 0) or (Pos('+',Text) > 0 )) and
(SelLength=0 ) then Key:=#0;
if SelStart > 0 then Key:=#0;
end;
//控制.
if (Key = '.') and (EditType=3 ) then
begin
if (Pos('.',Text) > 0) and (not((SelStart=Pos('.',Text) ))) then Key:=#0;
if SelStart=0 then Key:=#0;
if (Digits>0) and (SelStart+SelLength=0) and (EditType=3) then
if (pos('.',Text )>0 ) and (SelStart>=pos('.',Text)) then
if length(Text)-pos('.',Text )>=Digits then Key:=#0;
end;
end;


procedure TNewStoveFM.Edt_QtyKeyPress(Sender: TObject; var Key: Char);
begin
FormatKeyPress(TEdit(Sender).Text,TEdit(Sender).SelStart,TEdit(Sender).SelLength,Key,3,4);
end;
 
谢谢,我仔细看看
 
为什么不用一下MaskEdit呢,搞的这么复杂。
 
maskedit限制得太死,我输个123.45可能被变成123__.45了
 
请参考只能输入数字和小数点的代码!!
在EDIT的onkeypress事件中写如下代码,限制只能输入数字、小数点。
当然还有BACKSPACE和ENTER
PROCEDURE ....
BEGIN
if not (key in['0'..'9','.',#8,#13]) then key:=#0;
END;
 
可以结束了,谢谢诸位的回答。
 
to delphiland
你的那个函数不能对小数位数进行限制。
并且对连续两个小数点没有限制。
我对上面的函数改了一下

//控制.
if (Key = '.') and (EditType=3 ) then
begin
[red]if (Pos('.',Text) > 0) and ((SelLength = 0) or (not((SelStart < Pos('.',Text)) and (SelLength >= Pos('.',Text) - SelStart)))) then
Key := #0; //不出现两个小数点[/red]
if SelStart=0 then //小数点不出现在第一位
Key:=#0;
[red]end; [/red]
//以下为对小数位数的限制。
if (Digits>0) [red]{and (SelStart+SelLength=0)} [/red]and (EditType=3) then
if (pos('.',Text )>0 ) and (SelStart>=pos('.',Text)) then
if (length(Text)-pos('.',Text )>=Digits) [red]and (SelLength = 0) [/red]then
Key:=#0;

请试试。
 
谢谢,我原来已经接受答案了,不知为什么没有发出,对不起个位了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部