假设我有一个窗体,上面有一个菜单栏,菜单栏上有一个项目TMenuItem
,我可以为它分配一个快捷组合键,例如Ctrl+I。但是当我为TMenuItem
分配ShortCut
属性时,它似乎只是改变菜单项的视觉外观以显示快捷方式代码,而不是自动侦听短-按下剪切键并触发我的ActionManager代码。
我的google-fu今天似乎失败了,我只找到了关于如何为windows分配全局热键的文章,而不是如何分配只在活动窗体上工作的应用程序特定热键。
除了在菜单中添加快捷键属性之外,谁能给我介绍一下添加热键的必要步骤?我在想,我可能需要在某个地方设置窗体监听键盘输入,捕获按键并响应它?但我不确定 Delphi 会在哪里或用什么方法来做。
3条答案
按热度按时间4si2a6ki1#
您似乎正在使用操作(ActionManager),因此请将快捷方式分配给相关的操作。(将操作分配给菜单项也会将快捷方式分配给菜单项。)
bihw5rsg2#
考虑没有为VCL消息提供窗口句柄的示例,我们使用WM_HOTKEY。此消息由Windows热键中的注册窗口发送,该热键允许程序响应它,即使没有输入焦点:
um6iljoc3#
很高兴知道
WM_HOTKEY
的这种方式,但它太极端了:好的一面是它可以使用热键,如“控制”和“+”(VK_ADD = 107)和“控制”和“-”(VK_SUBTRACT = 109)。
购买我想要的是热键只有当我们的应用程序是活跃的,不影响任何其他应用程序的热键。
谢谢,至少我有了个起点。