2012-04-14 8 views
0

私は項目付きのコンボボックスを持っています - ホットキー。 Win32のホットキーにそれぞれを関連付けるとします。 F2をVK_F2に設定して、RegisterHotkeyでそれを呼び出します。これを行う最善の方法は何ですか?私はものを見上げて、おそらく16進数の値が助けになるかもしれませんが、それを使う方法は言いません。ありがとう。コンボボックスの項目をWin32 APIのホットキーに関連付けるにはどうすればいいですか?

私は、私はより多くの情報を提供することができませんでした申し訳ございませんが、私は他に何私が含まれるべきであるかわからない:あなたはTextToShortCutを使用して、RegisterHotKeyに必要な値に戻すTShortCutをデコードすることができます/

答えて

1

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; 

TextToShortCutShortCutToKeyは両方Menus単位で定義されています。

YourHotKeyIDは、WM_HOTKEYメッセージを受け取ったときにwParamであなたのアプリに渡される$ 0000- $ BFFFの値です。

すべてのことが言われているので、UIコントロールの選択を再考する必要があります。 THotKeyを使用すると、ユーザーは(リストをスクロールせずに)使用したいキーの組み合わせを押すだけで済みます。あなたのすぐ対を見越して、

ShortCutToKey(HotKey1.HotKey, Key, Shift); 
// ... remainder of code 

そして:あなたは、サンプルコード中ShortCut変数(あなたがShortCutToKeyに直接渡し、そして完全ShortCut変数を排除することができます)の代わりにTHotKey.HotKeyを使用することができますコメント:)、WM_HOTKEYメッセージをキャッチして処理する方法と、登録した複数のホットキーを処理する方法が新しい質問になるはずです。これは具体的にはコンボボックスとホットキーに関するものでした。ホットキーの押さえ方を扱う方法は全く異なります。

+0

Pff、私は実際にWM_HOTKEYをキャッチして処理する方法を知っています:P – argoneus

+0

@argoneus、あなたは笑顔に気付いたのですか? :) –

+0

ええ、私はそれを「Inb4」としました。その質問にはP: – argoneus

関連する問題