德尔福:如何阻止TAction快捷键autorepeating?
-
20-08-2019 - |
题
我使用一个Delphi TActionList,与快捷键的一些行动。
我想以防止触发通过键盘自动重复多次的某些动作,但我的不的要影响全球自动重复操作。什么是这样做的最佳方式?
澄清的:我还需要处理多个快捷按键 - 它的只有的,我想通过自动重复产生的按键忽略。
解决方案
截取的 WM_KEYDOWN 消息,并且看在30位,看它是否是自动重复。如果是,只是不传递消息照常并且不会被看到。
您可能需要启用形式键预览,使这项工作。
其他提示
您可以删除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;
您可以用dmajkic的解决方案相结合这得到一个更通用的形式给出。如果你真的雄心勃勃,你可以创建TAction / TActionlist的新版本。
不隶属于 StackOverflow