0

我可以用 WIN 键以某种方式设置 TMainManu 项目快捷方式吗?例如设置“Win+Alt+S”。TShortcut 类型是否支持 WIN 键。我使用德尔福 7。

4

3 回答 3

6

ShortCut至少据我所知,您无法从 VCL 控件的属性中响应这样的快捷方式。Delphi 的快捷机制不会将 Windows 键视为修饰符。因此,您需要将其作为非修饰键包含在内。但是 Delphi 快捷方式只能引用一个非修饰键,并且您需要两个非修饰键来按键。

但是,您可以添加自己的定制处理并响应此类按键。例如,在OnShortCut您的表格中。这是非常粗略的,但说明这是可能的。

procedure TMyForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  if (GetKeyState(VK_LWIN)<0) and (GetKeyState(VK_MENU)<0) then begin
    if Msg.CharCode = ord('S') then begin
      // do something
      Handled := True;
    end;
  end;
end;

现在,我不会尝试整理或正确执行此操作,因为指南非常明确,您不应响应涉及 Windows 键的快捷方式。MSDN说:

涉及 WINDOWS 键的键盘快捷键保留供操作系统使用。

我只是想证明在您的应用程序中处理此类按键是完全可能的。

于 2013-09-16T20:51:54.753 回答
1

这不能通过TShortCut菜单设计器或代码使用 , 来完成。在表单上删除 a TMainMenu,添加 aTMenuItem并尝试分配会引发“无效的属性值”异常,并且在尝试在代码中Win执行此操作时也不起作用。KeyToShortCut

根据微软的说法,你应该为快捷方式使用的唯一修饰符是ShiftCtrl和。密钥属于 Windows AltWin这就是它有这个名字的原因:-)

于 2013-09-16T20:25:24.680 回答
1

但是,您可以将 windows 键用作全局热键的一部分。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx 所以你可以让它看起来像是一个快捷方式,但实际上,会是全系统。所以你不应该这样做。

于 2013-09-16T20:28:07.150 回答