5

Windows XE2、TVirtualStringTree、およびTComboBoxをインプレース エディタとして使用しています。

をフォームに直接配置するTComboBoxと、実行時にリストをドロップダウンでき、マウス ホイールでリスト内の項目を (必要に応じて) 上下にスクロールできます。ただし、TComboBoxが実行時TVirtualStringTreeにインプレース エディターとして作成されると、新しく作成されたコンボ ボックスにフォーカスがあっても、マウス ホイールのWM_MOUSEWHEELメッセージはコンボ ボックスではなくツリー コントロールに送信されます。

コンボ ボックスのドロップダウン リストの項目がスクロールしないため、これは明らかです。代わりに、コンボ ボックスの背後にあるツリー コントロールがスクロールします。コンボ ボックスの固定部分はツリーと共に移動しますが、ドロップダウン リストはコンボ ボックスの固定部分から切断され、移動しません (図のように)。

ツリー コントロールがドロップダウン リストの後ろにスクロールする例

どちらの場合も、TComboBox.Styleは に設定されていcsDropDownListます。コンボ ボックスがツリーのインプレース エディターとして作成される場合、次のように行われます。

FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;

マウスがどこにホバリングしているかは問題ではありません。コンボ ボックスのドロップダウン リスト内の項目のすぐ上に配置することもできますが、スクロールするのはバックグラウンドのツリー コントロールのままです。コンボ ボックス内の項目をスクロールする唯一の方法は、スクロール バーを使用することです。

フォーカスされたコントロールの親が、コントロール自体 (この場合はTComboBox) ではなく、マウス ホイール メッセージを受信する原因は何ですか?

4

1 に答える 1