在 Delphi/FMX 中触发一次 OnKeyDown-Event 之后,如何在触发 OnKeyDown-Event 之前更改延迟?
How can I change the Delay before triggering the OnKeyDown-Event after it was triggered once in Delphi/FMX?
对不起,看来我又遇到了初学者的问题,但我没有在网上或帮助部分找到解决方案:
我想使用 OnKeyDown 事件做一些事情(不同的事情,所以我需要一个通用的解决方案),例如增加标签中的数字。
我的代码如下所示:
Var i : Integer = 0;
...
procedure TExampleForm.FormKeyDown(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
Inc(i);
ExampleLabel.Text:=IntToStr(i);
end;
如果我在实际程序中按住一个Key,它会立即触发一次事件,然后在短暂延迟后多次触发事件,究竟应该如何: 问题是,我不希望在第一次触发事件之后出现这种延迟,而这些延迟是由按住按钮引起的。有什么办法可以阻止 Delphi (或者可能是键盘)这样的行为吗?我真的很感激一个解决方案,感谢您的时间和努力!
我自己不使用 Firemonkey,但如果您愿意,下面的 VCL 演示应该很容易转换为 Firemonkey。
在表格上拖 TLabel
。
在表格上拖 TTimer
。将其 Interval
设置为 30
并将 Enabled
设置为 False
。在它的 OnTimer
事件中,写一些类似
的东西
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Tag := Label1.Tag + 1;
Label1.Caption := Label1.Tag.ToString;
end;
在表单的 OnKeyDown
处理程序中,写入
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_SPACE then
Timer1.Enabled := true;
end;
在表单的 OnKeyUp
处理程序中,写入
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_SPACE then
Timer1.Enabled := false;
end;
对不起,看来我又遇到了初学者的问题,但我没有在网上或帮助部分找到解决方案:
我想使用 OnKeyDown 事件做一些事情(不同的事情,所以我需要一个通用的解决方案),例如增加标签中的数字。 我的代码如下所示:
Var i : Integer = 0;
...
procedure TExampleForm.FormKeyDown(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
Inc(i);
ExampleLabel.Text:=IntToStr(i);
end;
如果我在实际程序中按住一个Key,它会立即触发一次事件,然后在短暂延迟后多次触发事件,究竟应该如何: 问题是,我不希望在第一次触发事件之后出现这种延迟,而这些延迟是由按住按钮引起的。有什么办法可以阻止 Delphi (或者可能是键盘)这样的行为吗?我真的很感激一个解决方案,感谢您的时间和努力!
我自己不使用 Firemonkey,但如果您愿意,下面的 VCL 演示应该很容易转换为 Firemonkey。
在表格上拖
TLabel
。在表格上拖
的东西TTimer
。将其Interval
设置为30
并将Enabled
设置为False
。在它的OnTimer
事件中,写一些类似procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Tag := Label1.Tag + 1; Label1.Caption := Label1.Tag.ToString; end;
在表单的
OnKeyDown
处理程序中,写入procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_SPACE then Timer1.Enabled := true; end;
在表单的
OnKeyUp
处理程序中,写入procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_SPACE then Timer1.Enabled := false; end;