我可以用 WIN 键以某种方式设置 TMainManu 项目快捷方式吗?例如设置“Win+Alt+S”。TShortcut 类型是否支持 WIN 键。我使用德尔福 7。
3 回答
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 键的键盘快捷键保留供操作系统使用。
我只是想证明在您的应用程序中处理此类按键是完全可能的。
这不能通过TShortCut
菜单设计器或代码使用 , 来完成。在表单上删除 a TMainMenu
,添加 aTMenuItem
并尝试分配会引发“无效的属性值”异常,并且在尝试在代码中Win执行此操作时也不起作用。KeyToShortCut
根据微软的说法,你应该为快捷方式使用的唯一修饰符是Shift、Ctrl和。密钥属于 Windows Alt。Win这就是它有这个名字的原因:-)
但是,您可以将 windows 键用作全局热键的一部分。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx
所以你可以让它看起来像是一个快捷方式,但实际上,会是全系统。所以你不应该这样做。