创建一个edit组件,只能输入整数和浮点数?(100分)

  • 主题发起人 主题发起人 oer_2001
  • 开始时间 开始时间
O

oer_2001

Unregistered / Unconfirmed
GUEST, unregistred user!
创建一个edit组件,只能输入整数和浮点数?
 
在keyonkeypress事件中
if not(key in ['0'..'9','.']) then key :=#0;
 
楼上的不完整
还要包括del和backspace
 
同意楼上
还可以用 pos 来判断
 
在keyonkeypress事件中
if not(key in ['0'..'9','.',#8]) then key :=#0;
 
别忘了还有 - 号
 

我想还应该判断是否重复输入'.''-'吧
 
给你个函数(别人写的):
//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;
 
给你一个我自己写的东东(刚写的):
1 定义两个全局变量flag0,flag1:boolean;,标记是否有‘,’和‘-’输入;
2 在 onformshow 事件中:
flag0:=false;
flag1:=false;
3 在onkeypress事件中处理代码为:
if (key='-' and flag0=true) or (key='.' and flag1=true) then
key:=#0;
if key='-' then
flag0:=true;
if key='.' then
flag1:=true;
if not (key in ['0'..'9',#8,'-','.']) then
key:=#0;
 
后退
顶部