5

Delphi IDE に新しいショートカットを追加することは、Open Tools API がこのためのサービスを提供するため、それほど難しくありません。私は明らかにもっと複雑なことをしようとしています:追加のショートカットのようなワードスターを追加します:

ユーザーが押したときに何かを起こしたい

Shift+Ctrl+H に続いて単一キー X

Shiftキーの状態に関係なく、Xは機能するはずです。

これは私のコードです:

procedure TGxKeyboardBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
const
  DefaultKeyBindingsFlag = kfImplicitShift + kfImplicitModifier + kfImplicitKeypad;
var
  GExpertsShortcut: Byte;
  ShiftState: TShiftState;
  FirstShortCut: TShortCut;
  SecondShortCut: TShortCut;
begin
  GExpertsShortcut := Ord('H');
  ShiftState := [ssShift, ssCtrl];
  FirstShortCut := ShortCut(GExpertsShortcut, ShiftState);
  SecondShortCut := ShortCut(Ord('X'), []);
  BindingServices.AddKeyBinding([FirstShortCut, SecondShortCut],
    TwoKeyBindingHandler, nil,
    DefaultKeyBindingsFlag, '', '');
end;

したがって、 ShiftState := [ssCtrl] を押すと

Ctrl+HX

私の TwoKeyBindingHandler メソッドを呼び出します。

しかし ShiftState := [ssShift, ssCtrl] を押すと

Shift+Ctrl+HX

何もしません。

奇妙なことに、 ShiftState := [ssShift, ssCtrl] (最初のキーにのみ影響するはずです) を指定すると、

Shift+Ctrl+H Shift+X

修飾キーなしで 2 番目の ShortCut が追加されても、TwoKeyBindingHandler メソッドを呼び出します。

何か案が?これは、Delphi IDE/Open Tools API の既知の制限/バグでしょうか? 既知の回避策はありますか?

Delphi 2007 と Delphi 10 Seattle で試してみましたが、違いはありませんでした。

4

2 に答える 2

1

OK、明らかに誰も答えを見つけていないので、ここに私がやったことがあります:

2 番目のキーのすべての可能な文字を一覧表示するヒント ウィンドウを表示することを既に計画していました (実際には、この質問に対する Helen Fairgrieve の回答で提案されたアプローチを使用して、そのコードは既に正常に機能していました)。代わりに、ワンキー ショートカットのみを登録するようになりました。

BindingServices.AddKeyBinding([FirstShortCut],
  TwoKeyBindingHandler, nil,
  DefaultKeyBindingsFlag, '', '');

そして、TwoKeyBindingHandler メソッドで、これらの文字をショートカットとして含むポップアップ メニューを表示します。その後、IDE/VCL/Windows が残りを処理します。

これは次のようになります。 結果のアニメーション GIF

実際の質問に対する回答ではありませんが、私の問題は解決します。もっと何かを期待してここに来たらごめんなさい。

于 2016-02-03T19:20:19.820 に答える