我想将函数写入TEdit
,其属性NumbersOnly
处于活动状态。如果用户输入了一个字母,而不是输入一个数字,该函数将使用ShowHint
显示一个自定义消息并输入密钥。
我在下面写了这段代码。但问题是,无论我按哪个键,数字或字母,都会显示提示。要查看需要帮助的地方的问题,这是代码:
procedure nHint(hHint: string; AEdit: TEdit);
var
point: TPoint;
Key: Char;
begin
if AEdit.NumbersOnly = true then
begin
if not(CharInSet(Key, ['0' .. '9', #8])) then
begin
form1.BalloonHint1.Description := hHint;
point.X := AEdit.Width div 2;
point.Y := AEdit.Height div 1;
form1.BalloonHint1.ShowHint(AEdit.ClientToScreen(point));
Abort;
end
else
begin
form1.BalloonHint1.HideHint;
end;
end;
end;
procedure TFrame1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
nHint('Number Only', Edit1);
end;
答案 0 :(得分:1)
您的问题是您将key
作为局部变量进行十分转换,而您未初始化该变量。
为了让您的程序工作,您需要将key
作为参数传递给您的程序:
更改
procedure nHint(hHint: string; AEdit: TEdit);
对此:
procedure nHint(hHint: string; AEdit: TEdit; var Key: Char);
删除本地变量key
当你调用它时,你传递了额外的参数。
所以改变这个:
nHint('Number Only', Edit1);
到此:
nHint('Number Only', Edit1, Key);
然后它起作用