在edit的OnKeyPress事件中控制edit只接受数字和小数点输入
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','.']) then
key:=#0;
end;
但这样连退格键都不能用了,如何使退格键可用?
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','.']) then
key:=#0;
end;
但这样连退格键都不能用了,如何使退格键可用?
解决方案 »
- 我用Vclzip控件进行压缩和解压,压缩和解压时怎么判断压缩和解压完毕!!
- 如何获得调用的程序名 (在线等)
- 请问有没有这种可能性:用delphi编译后的程序无法被删除?
- 数据集的过滤
- 调查:十一去哪里?
- 救命呀,急得不行:小弟照着编了一个ActiceX组件,但属性页的代码看不懂,请大侠指教。
- delphi的程序员,
- 如何在使用Tlientsocket与Tserversocket的C/S程序中发送与接收一个数组?
- 如何用Sql语句选择数据库字段中的前几位?
- double 和 str 如何转换?
- 请教用delphi如何检测当前系统是否支持OpenGL
- 如何使delphi菜单连接到帮助文档(.chm)
key := #0;
if key = '.' then
if AnsiContainsStr((Sender as tedit).Text , '.') then
key := #0;
begin
inherited;
if ((Key <'0') or (Key>'9')) and (Key<>'.') and (Key<>'-') and
(Key<>Char(VK_BACK)) and (Key<>Char(VK_Delete)) and (Key<>Char(VK_Left)) and
(key <> Char(VK_Right)) then
key:=#0
else if key='.' then begin
if (Sender as TCustomEdit).SelStart=0 then
key:=#0
else if pos('.',(Sender as TCustomEdit).Text)>0 then
key:=#0;
end
else if key='-' then begin
if (Sender as TCustomEdit).SelStart <>0 then
key:=#0
else if pos('-',(Sender as TCustomEdit).Text)>0 then
key:=#0;
end;
end;
key := #0
else
begin
if key = '.' then
begin
if pos('.', TEdit(Sender).Text) > 0 then key := #0; //只能输入一个小数点
if (length(TEdit(Sender).Text) = 0) then //如果第一次输入'.'则自动加'0';
begin
Tedit(Sender).SelText:='0.';
key:=#0;
end;
end
else
if key = '0' then
begin
if (length(TEdit(Sender).Text) = 1) and (TEdit(Sender).Text = '0') then
key := #0;
end
else
begin
if (length(TEdit(Sender).Text) = 1) and (TEdit(Sender).Text = '0') then
TEdit(Sender).Text := '';
end; end;
if key := #8 then ....
这样应该就可以处理退格了
else
begin
if (length(TEdit(Sender).Text) = 1) and (TEdit(Sender).Text = '0') then
TEdit(Sender).Text := '';
end;
if not (key in ['0'..'9'],#8,#46]
then
showmessage('输入格式错误');
就可以了
#8 是退格的ASC码,#46是小数点的ASC码
var Key: Char);
begin
if not(Key in ['0'..'9','.', #8]) then
begin
Key := #0;
Beep;
end;
end;
if not (Key in ['0','1','2','3','4','5','6','7','8','9', #13, '.', Chr(VK_Back)]) then
Key:=#0;
function TParaAddFrm.IsReal(AStr: String; AKey: Char): Char;
begin
//只能输入数字和小数点,回车键和退格键
if (AKey in ['0'..'9','.']) or (AKey=#8) or (AKey=#13) then
begin
if AKey='.' then
if Pos('.',AStr)>0 then
AKey:=#0;
end
else
AKey:=#0;
Result:=AKey;
end;
procedure TParaAddFrm.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
//时间值必须为实数
with StringGrid1 do
if Col=1 then
Key:=ParaAddFrm.IsReal(Cells[Col,Row],Key);
end;