7

メニューバーが付いたフォームがあるとします。メニューバーに、TMenuItemたとえばCtrl+などのショートカットキーの組み合わせを割り当てることができる項目がありますI。しかし、のShortCutプロパティを割り当てるTMenuItemと、押されるショートカットキーを自動的にリッスンしてActionManagerコードをトリガーするのではなく、メニュー項目の外観を変更してショートカットコードを表示するように見えます。

私のgoogle-fuは今日失敗しているようです。アクティブなフォームでのみ機能するアプリケーション固有のホットキーを割り当てる方法ではなく、Windowsにグローバルホットキーを割り当てる方法に関する記事しか見つけていません。

メニューにショートカットプロパティを追加するだけでなく、ホットキーを追加するために必要な手順の概要を教えてもらえますか。おそらくどこかで、キーボード入力をリッスンするようにフォームを設定し、キー押下をトラップしてそれに応答する必要があると考えていますか?しかし、Delphiがそれを行う方法がどこにあるのか、何ができるのかは正確にはわかりません。

4

2 に答える 2

8

アクション(ActionManager)を使用しているようですので、代わりに関連するアクションにショートカットを割り当ててください。(Action を MenuItem に割り当てると、ショートカットもメニュー項目に割り当てられます。)

于 2012-07-24T07:23:14.147 に答える
4

WM_HOTKEYを使用する VCL メッセージにウィンドウ ハンドルが提供されていない例を考えてみましょう。このメッセージは、入力フォーカスがなくても、プログラムがそれに応答できるようにする Windows ホットキーの登録済みウィンドウによって送信されます。

type
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    // Declare a event handler
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
   // Registering a hotkey Ctrl+Alt+F5
   RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Unregisters a hotkey
   UnRegisterHotKey(Handle, 0);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
   // This procedure is called when a window message WM_HOTKEY
   inherited;  // We give the form to process the message,
               // if she already has its handler
   Beep;       // We perform additional actions
end;
于 2012-07-24T17:13:01.227 に答える