Дельфы:Как мне остановить автоматическое повторение сочетаний клавиш TAction?

StackOverflow https://stackoverflow.com/questions/503538

Вопрос

Я использую тактический список Delphi с сочетаниями клавиш для некоторых действий.

Я хочу предотвратить многократное выполнение определенных действий с помощью автоматического повтора с клавиатуры, но я делаю не хотите повлиять на операцию автоматического повтора глобально.Каков наилучший способ сделать это?

Разъяснение:Мне все еще нужно обрабатывать несколько быстрых нажатий клавиш - это Только нажатия клавиш, сгенерированные с помощью автоповтора, которые я хочу проигнорировать.

Это было полезно?

Решение

Перехватить WM_KEYDOWN сообщения, и посмотрите на бит 30, чтобы увидеть, автоматически ли он повторяется.Если это так, просто не передавайте сообщение, как обычно, и оно не будет замечено.

Возможно, вам потребуется включить предварительный просмотр ключа формы, чтобы это сработало.

Другие советы

Вы можете удалить TTimer, установить TTimer.Интервал равен нужному вам значению (1000 = 1 сек), затем в TActionList сделайте что-то вроде:

procedure TfrmMain.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
  if Timer1.Enabled then 
  begin
    Handled := True;
    Exit;
  end;

  Handled := false; 
  Timer1.Enabled := true;     
end;

Также не забудьте отключить таймер в Таймер.Таймер включения.

Вы можете сохранить время последнего использования действия и проигнорировать его, если промежуток времени между ними слишком мал.Для одного действия вы можете выполнить следующее:

procedure TForm.FormCreate(const Sender: TObject);
begin
  // ...

  FLastActionTime := Now; // 
end;

proceudure TForm.Action1Execute(const Sender: TObject);
const
  cThreshold = 1/(24*60*60*10); // 0.1 sec
begin
  if Now-FLastActionTime<cThreshold then
    Exit; // Ignore two actions within 0.1 sec
  FLastActionTime := Now;
end;

Вы можете объединить это с решением dmajkic, чтобы получить более общий подход.И если вы действительно амбициозны, вы можете создать новую версию TAction / TActionList.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top