デルファイ:どのようにアクション/ MenuItemのに上矢印のキーボードショートカットを割り当て、ナビゲートするため実際にそれを維持するために、リストコントロール(リストボックス/ VTV)?

StackOverflow https://stackoverflow.com/questions/2176519

質問

私を支援してください:どのように行動するか、メニュー項目にキーボードショートカット矢印アップを割り当て、

同時に、リストコントロール(他の例えばリストボックス/仮想ツリービューを/)ナビゲートするために、実際にそれを維持するために?

ありがとうございます。

役に立ちましたか?

解決

あなたのコメントます:

  

そして、どのように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;

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

他のヒント

KeyPreview := true

設定フォーム特性に

は、フォームの書き込みイベントのKeyUpイベントであなたアップキーが押されたかどうかを確認し、それが(アクション1と呼ばれるこの場合、メニュー項目の)メニュー項目を呼び出すようにするには:

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;
あなたが実行するアクション1を必要とする場合は、

彼らは現在のコントロールがリストボックスでない場合でも、and声明

IFの一部を削除
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top