デルファイ:どのようにアクション/ MenuItemのに上矢印のキーボードショートカットを割り当て、ナビゲートするため実際にそれを維持するために、リストコントロール(リストボックス/ VTV)?
質問
私を支援してください:どのように行動するか、メニュー項目にキーボードショートカット矢印アップを割り当て、
同時に、リストコントロール(他の例えばリストボックス/仮想ツリービューを/)ナビゲートするために、実際にそれを維持するために?ありがとうございます。
解決
あなたのコメントます:
そして、どのように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
の一部を削除 所属していません StackOverflow