在 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。

  1. 在表格上拖 TLabel

  2. 在表格上拖 TTimer。将其 Interval 设置为 30 并将 Enabled 设置为 False。在它的 OnTimer 事件中,写一些类似

    的东西
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Label1.Tag := Label1.Tag + 1;
      Label1.Caption := Label1.Tag.ToString;
    end;
    
  3. 在表单的 OnKeyDown 处理程序中,写入

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key = VK_SPACE then
        Timer1.Enabled := true;
    end;
    
  4. 在表单的 OnKeyUp 处理程序中,写入

    procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if Key = VK_SPACE then
        Timer1.Enabled := false;
    end;