Как я могу изменить Задержку перед запуском OnKeyDown-Event после того, как он был запущен один раз в Delphi / FMX? - PullRequest
0 голосов
/ 04 марта 2019

Извините, но, похоже, у меня снова возникла проблема с новичком, но я не нашел ее решения в Интернете или в разделе справки:

Я хочу использовать событие 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;

Если я нажму и удерживаю клавишу в текущей программе, это вызовет событие только один раз сразу, а затем вызовет событие после небольшой задержкимного раз, именно так, как и должно быть: Проблема в том, что я не хочу этой задержки после первого запуска события и тех, которые вызваны удержанием кнопки.Есть ли способ остановить поведение Delphi (или, возможно, клавиатуры), как это?Буду очень признателен за решение, спасибо за ваше время и усилия!

1 Ответ

0 голосов
/ 04 марта 2019

Я сам не использую 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. Inобработчик формы OnKeyUp, напишите

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