3

最近改良された特定の検索フォームが機能しています。その機能は、標準の検索フォームの機能です。上部のいくつかのボックスにいくつかの基準を入力し、[検索] ボタンをクリックすると、下のグリッドに結果が表示されます。しかし、それは醜く、機能が非常に制限されていたので、同僚の 1 人がそれを再構築しました... 新しい仕事に行く直前に。今、最後のいくつかの詳細を完成させようとしています。

TListBox変更の 1 つは、古いグリッドをより強力なに置き換えることでしたTVirtualStringTree。しかし、その過程で何かが壊れたようです: 以前は、グリッドの行をクリックして (グリッドにフォーカスを置いて) をヒットEnterすると、適切なイベント ハンドラーが起動して入力を処理し、詳細ビューが開きました。選択したアイテムの。ただし、このグリッドでは、 を押すと、プロパティを持つフォームの が代わりにEnter起動します。TButtonDefault = trueOnClick

TVirtualStringTree入力フォーカスがあるときに優先して、フォームにディスパッチする前に (できれば代わりに) ユーザーが Enter キーを押したことに応答するようにするにはどうすればよいですか?

4

1 に答える 1

5

WM_GETDLGCODEメッセージを処理DLGC_WANTALLKEYSし、戻り値に含めます。例えば:

procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;

....

procedure TMyControl.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  inherited;
  Message.Result := DLGC_WANTALLKEYS;
end;

0コントロールが既にこのメッセージを処理しているかどうかに応じて、使用する必要がある以外の何かを返します。

Message.Result := Message.Result or DLGC_WANTALLKEYS;

このクラスのコードを変更したくない場合は、インターポーザーを使用するかWindowProc、コントロールのプロパティを設定してウィンドウ プロシージャをインターセプトします。

于 2016-10-11T18:40:48.637 に答える