0

アイテム(ホットキー)を含むコンボボックスがあります。それぞれをWin32ホットキー(F2からVK_F2など)に関連付けてから、RegisterHotkeyで呼び出します。これを行うための最良の方法は何ですか?私はものを調べました、そしておそらく16進値が役立つかもしれません、しかしそれはそれらを使う方法を言いません。ありがとう。

申し訳ありませんが、これ以上の情報を提供できませんでしたが、他に何を含めるべきかわかりません:/

4

1 に答える 1

1

を使用して、返された値を次の必要な値にTextToShortCutデコードできます。TShortCutRegisterHotKey

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は、メッセージwParamを受信したときにアプリに渡される、定義した$ 0000〜$BFFFの値です。WM_HOTKEY

以上のことをすべて踏まえて、UIコントロールの選択を再検討する必要があります。を使用する場合THotKey、ユーザーは(リストをスクロールする代わりに)使用したいキーの組み合わせを押すだけです。THotKey.HotKey次に、サンプルコードの変数の代わりにinを使用できShortCutます(変数をに直接渡し、変数を完全にShortCutToKey削除できます)。ShortCut

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

そして、あなたのすぐに来るコメントを見越して:)、WM_HOTKEYメッセージをキャッチして処理する方法と、登録した複数のホットキーを処理する方法は、新しい質問になるはずです。これは特にコンボボックスとホットキーに関するものでした。押されているホットキーの処理方法はまったく異なります。

于 2012-04-14T21:14:03.543 に答える