【问题标题】:Pause/Break as a Keyboard ShortCut (Win32, *Possibly* Delphi-specific)暂停/中断作为键盘快捷键(Win32,*可能* Delphi 特定)
【发布时间】:2010-07-15 17:27:29
【问题描述】:

不能在键盘快捷键中使用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 键,例如在菜单项和操作列表中。对象检查器让我输入 PauseShift + PauseCtrl + Pause , Alt + Pause, Ctrl + Shift + Pause 等等。识别 Pause 键。但是当我运行应用程序时,菜单项/操作不会在指定的快捷方式上触发。有已知的解决方法吗?

【问题讨论】:

    标签: delphi winapi keyboard-shortcuts


    【解决方案1】:

    对于 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]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多