给你一个自己编写的函数,用起来很方便 function IsFloat(Owner:TEdit;nLength:integer;nDec:integer;key:char;nSign:integer):char; var nKeyValue:integer; str,str1:string; begin if nDec=0 then nlength:=nlength+1; str:=owner.Text; nKeyvalue:=ord(key); case nKeyValue of //0-9数字 48..57: if owner.SelLength=0 then begin if pos('.',str)<>0 then begin if (pos('+',str)<>0) or (pos('-',str)<>0) then begin if (owner.SelStart<pos('.',str)) then begin str1:=copy(str,1,pos('.',str)-1); if length(str1)-1>=nlength-ndec-1 then key:=chr(0); end else begin str1:=copy(str,pos('.',str)+1,100); if (length(str1)>=ndec) then key:=chr(0); end; end else begin if (owner.SelStart<pos('.',str)) then begin str1:=copy(str,1,pos('.',str)-1); if length(str1)>=nlength-ndec-1 then key:=chr(0); end else begin str1:=copy(str,pos('.',str)+1,100); if (length(str1)>=ndec) then key:=chr(0); end; end; end else begin if (pos('+',str)<>0) or (pos('-',str)<>0) then begin if (length(str)-1>=nlength-ndec-1) then key:=chr(0); end else begin if (length(str)>=nlength-ndec-1) then key:=chr(0); end; end; end; //return回车 13:; //backspace 8: ; //+加号 43: if (nSign<>2) and (nSign<>3) then key:=chr(0) else begin if (pos('+',str)<>0) or (pos('-',str)<>0) then key:=chr(0) else begin if owner.SelStart<>0 then key:=chr(0); end; end; //- 减号 45: if (nSign<>1) and (nSign<>3) then key:=chr(0) else begin if (pos('+',str)<>0) or (pos('-',str)<>0) then key:=chr(0) else begin if owner.SelStart<>0 then key:=chr(0); end; end; //.小数点 46: if nDec=0 then key:=chr(0) else begin if (pos('.',str)<>0) then key:=chr(0) else begin if owner.SelStart=0 then key:=chr(0); end; end; //in key_down 37,38,39,40,left,up,righ,down,左,上,右,下 //ind key_down 46: else key:=chr(0); end; isfloat:=key; end;
想象在ONCHANG中判断即可
我听人说是大于128的字符?
到底是哪??
Who can help me?
{
for(int i=0;i<Edit1->Text.Length();i++)
{
if(Edit1->Text.IsTrailByte(i)||Edit1->Text.IsLeadByte(i))
{
Edit1->Text="";
return;
}
}
}
key:= char(0);
即可将一切键盘输入转化为空,也就达到了禁止的目的。
因为有一段时间没机子做Delphi了,对于事件名称参数名都记不太清楚了,在IDE里可以获得提示。
请问progray,你的方法是否可用于屏蔽中文?
我有很长时间没有接触了,好象是这样的
在keypress事件中不是有var:key吗,
在其中的语句中添加语句,例如屏蔽0--9
if key not in ('0'..'9') then key:=char(0);
以此类推
key:= char(0);
所有输入全部屏蔽;
如果屏蔽中文,就用zxb1106(宇飞)的做法。
function IsFloat(Owner:TEdit;nLength:integer;nDec:integer;key:char;nSign:integer):char;
var
nKeyValue:integer;
str,str1:string;
begin
if nDec=0 then
nlength:=nlength+1;
str:=owner.Text;
nKeyvalue:=ord(key);
case nKeyValue of
//0-9数字
48..57:
if owner.SelLength=0 then
begin
if pos('.',str)<>0 then
begin
if (pos('+',str)<>0) or (pos('-',str)<>0) then
begin
if (owner.SelStart<pos('.',str)) then
begin
str1:=copy(str,1,pos('.',str)-1);
if length(str1)-1>=nlength-ndec-1 then
key:=chr(0);
end
else
begin
str1:=copy(str,pos('.',str)+1,100);
if (length(str1)>=ndec) then
key:=chr(0);
end;
end
else
begin
if (owner.SelStart<pos('.',str)) then
begin
str1:=copy(str,1,pos('.',str)-1);
if length(str1)>=nlength-ndec-1 then
key:=chr(0);
end
else
begin
str1:=copy(str,pos('.',str)+1,100);
if (length(str1)>=ndec) then
key:=chr(0);
end;
end;
end
else
begin
if (pos('+',str)<>0) or (pos('-',str)<>0) then
begin
if (length(str)-1>=nlength-ndec-1) then
key:=chr(0);
end
else
begin
if (length(str)>=nlength-ndec-1) then
key:=chr(0);
end;
end;
end;
//return回车
13:;
//backspace
8: ;
//+加号
43:
if (nSign<>2) and (nSign<>3) then
key:=chr(0)
else
begin
if (pos('+',str)<>0) or (pos('-',str)<>0) then
key:=chr(0)
else
begin
if owner.SelStart<>0 then
key:=chr(0);
end;
end;
//- 减号
45:
if (nSign<>1) and (nSign<>3) then
key:=chr(0)
else
begin
if (pos('+',str)<>0) or (pos('-',str)<>0) then
key:=chr(0)
else
begin
if owner.SelStart<>0 then
key:=chr(0);
end;
end;
//.小数点
46:
if nDec=0 then
key:=chr(0)
else
begin
if (pos('.',str)<>0) then
key:=chr(0)
else
begin
if owner.SelStart=0 then
key:=chr(0);
end;
end;
//in key_down 37,38,39,40,left,up,righ,down,左,上,右,下
//ind key_down 46:
else
key:=chr(0);
end;
isfloat:=key;
end;
能不能先判断当前的输入法呢,仅接收英文输入法.
非英文输入法状态下key:=#0;