2

助けてください: 上矢印キーボード ショートカットをアクションまたはメニュー項目に割り当て、同時にリスト コントロール (例: ListBox/Virtual Treeview/other) をナビゲートするためにそれを実際に維持する方法は?

ありがとう!

4

2 に答える 2

2

あなたのコメント:

そして、Winamp プレーヤーはどうですか? それに対応して上矢印キーと下矢印キーに割り当てられた音量アップ/音量ダウン機能があります..わかりました、Delphiでそれが不可能な場合は...

しかし、それは確かに可能です。それを行うのは良い考えではなく、Windows ユーザー エクスペリエンス インタラクション ガイドラインに反します。

しかし、それを実装することに決めた場合は、次の方法があります。アクション コンポーネントを含むフォーム クラスで次のメソッドをオーバーライドします。

function IsShortCut(var Message: TWMKey): Boolean; override;

その中で、上下キーがショートカットであるアクションをトリガーするのを防ぐことができます。

function TWeirdForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if (Message.CharCode in [VK_UP, VK_DOWN])
    // insert test whether message needs to go to the focused control instead
    and (...)
  then begin
    // insert calls to code that should be executed instead
    Result := False;
    exit;
  end;
  inherited;
end;

正しいシフト状態もテストする必要があることに注意してください。また、矢印キーによるウィンドウの移動など、ユーザーが期待する他のウィンドウ動作をコードが壊していないことを確認してください。

于 2010-02-04T18:46:54.140 に答える
0

フォームのプロパティセット KeyPreview := true

次に、フォーム書き込みイベントのKeyUpイベントで、Upキーが押されているかどうかを確認し、メニュー項目(この場合はAction1と呼ばれるメニュー項目)を呼び出させます。

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_UP) and (ActiveControl = ListBox1)then
    Action11.Click;
end;

procedure TForm1.Action11Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >=0  then
    ShowMessage(ListBox1.Items[ListBox1.ItemIndex]);
end;

Current ControlがリストボックスでなくてもAction1を実行する必要がある場合は、ステートメントのand一部を削除してくださいIF

于 2010-02-01T13:52:46.610 に答える