作为键盘快捷键暂停/中断(Win32,*可能*特定于Delphi)

时间:2010-07-15 17:27:29

标签: delphi winapi keyboard-shortcuts

键盘快捷键中是否无法使用 Pause / Break 键?

我知道我可以回复 Pause / Break 键,例如

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_PAUSE then
    ShowMessage('VK_PAUSE pressed');
end;

但是,我无法使用TShortCut属性回复 Pause / Break 键,例如在菜单项和动作列表中。对象检查器允许我输入暂停 Shift + 暂停 Ctrl + 暂停 Alt + 暂停 Ctrl + Shift + 暂停等清楚识别 Pause 键。但是当我运行应用程序时,不会在指定的快捷方式上触发菜单项/操作。有没有已知的解决方法?

1 个答案:

答案 0 :(得分:11)

使用D2007,快速解决方法似乎是在运行时分配它;
Action1.ShortCut := VK_PAUSE;
由于某种原因,如果在设计时分配,VK_PAUSE(19)似乎变异为VK_NUMLOCK(144)。

<小时/> 在设计时分配快捷方式时,IDE必须将字符串转换为快捷方式。问题是TextToShortCut('Pause');返回144而不是19.虽然我不确定我是否认为错误是Delphi;使用“暂停”,检索快捷方式会找到menus.GetSpecialName的路径,我认为不应该这样做。

另外请注意,虽然上面提到的解决方法适用于“Alt”和“Shift”修饰符,但它不适用于“Ctrl”修饰符。原因是,操作系统协助“Ctrl + Break”处理特殊代码:VK_CANCEL。要使用“Ctrl + Pause”作为快捷方式,必须编码;

Action1.ShortCut := menus.Shortcut(VK_CANCEL, [ssCtrl]);