:
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
は、WM_HOTKEY
メッセージを受け取ったときにwParam
であなたのアプリに渡される$ 0000- $ BFFFの値です。
すべてのことが言われているので、UIコントロールの選択を再考する必要があります。 THotKey
を使用すると、ユーザーは(リストをスクロールせずに)使用したいキーの組み合わせを押すだけで済みます。あなたのすぐ対を見越して、
ShortCutToKey(HotKey1.HotKey, Key, Shift);
// ... remainder of code
そして:あなたは、サンプルコード中ShortCut
変数(あなたがShortCutToKey
に直接渡し、そして完全ShortCut
変数を排除することができます)の代わりにTHotKey.HotKey
を使用することができますコメント:)、WM_HOTKEY
メッセージをキャッチして処理する方法と、登録した複数のホットキーを処理する方法が新しい質問になるはずです。これは具体的にはコンボボックスとホットキーに関するものでした。ホットキーの押さえ方を扱う方法は全く異なります。
Pff、私は実際にWM_HOTKEYをキャッチして処理する方法を知っています:P – argoneus
@argoneus、あなたは笑顔に気付いたのですか? :) –
ええ、私はそれを「Inb4」としました。その質問にはP: – argoneus