我有一个带有项目的组合框 - 热键。我想将每个人与Win32热键相关联,例如F2到VK_F2然后用RegisterHotkey调用那个。最好的方法是什么?我查找了一些内容,也许十六进制值可能有所帮助,但它没有说明如何使用它们。感谢。
对不起,我无法提供更多信息,但我不知道还应该包括哪些内容:/
答案 0 :(得分:1)
您可以使用TextToShortCut
,然后将返回的TShortCut
解码为RegisterHotKey
所需的值:
var
Shortcut: TShortCut;
Flags: Cardinal;
Key : Word;
Shift : TShiftState;
begin
ShortCut := TextToShortCut(ComboBox1.Items[ComboBox1.ItemIndex]);
Flags := 0;
Key := 0;
Shift := [];
ShortCutToKey(Shortcut, Key, Shift);
if ssCtrl in Shift then
Flags := Flags or MOD_CONTROL;
if ssShift in Shift then
Flags := Flags or MOD_SHIFT;
if ssAlt in Shift then
Flags := Flags or MOD_ALT;
// You should check the return value of RegisterHotKey - it returns
// a BOOL indicating success or failure. Omitted because your
// question isn't about using RegisterHotKey.
RegisterHotKey(Application.Handle, YourHotKeyID, Flags, Key );
end;
TextToShortCut
和ShortCutToKey
都在Menus
单元中定义。
YourHotKeyID
是您定义的$ 0000- $ BFFF之间的值,当您收到wParam
消息时,该值将在WM_HOTKEY
中传递到您的应用。
尽管如此,您应该重新考虑您选择的UI控件。如果您使用THotKey
,则用户只需按下要使用的组合键(而不是滚动列表)。然后,您可以使用THotKey.HotKey
代替示例代码中的ShortCut
变量(您可以将其直接传递给ShortCutToKey
,并完全删除ShortCut
变量):< / p>
ShortCutToKey(HotKey1.HotKey, Key, Shift);
// ... remainder of code
并且,在预期即将发表的评论:)中,如何捕获和处理WM_HOTKEY
消息以及如何处理已注册的多个热键应该是一个新问题。这个是关于组合框和热键的;如何处理被按下的热键是完全不同的。