我正在使用Delphi TActionList,并为某些操作设置了快捷键。
我想防止某些操作被键盘自动重复触发多次,但我不希望全局影响自动重复操作。有什么最好的方法来实现这一点?
澄清:我仍然需要处理多个快速按键-只是我想忽略由自动重复生成的按键。
我正在使用Delphi TActionList,并为某些操作设置了快捷键。
我想防止某些操作被键盘自动重复触发多次,但我不希望全局影响自动重复操作。有什么最好的方法来实现这一点?
澄清:我仍然需要处理多个快速按键-只是我想忽略由自动重复生成的按键。
您可以放弃使用TTimer,将TTimer.Interval设置为所需值(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;
同时不要忘记在Timer.OnTimer中禁用计时器。
你可以保存上次使用操作的时间,并在两次操作之间的时间太短时忽略它。 对于单个操作,你可以这样做:
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;