3

Andreas Rejbrand数年前に回答したように、 Itemsとは異なる文字列値を表示する非常に簡単な方法は、 Styleプロパティを からcsDropDowncsOwnerDrawFixed設定することです。

問題は、それを行うとすぐに、Windows テーマのサポートが失われることです。
同じ制限が使用に適用されますcsOwnerDrawVariable

これらの 2 つの値は、Windows COMBOBOX コントロールのスタイル(に加えて)またはStyleを追加することに変換されます。CBS_OWNERDRAWFIXEDCBS_OWNERDRAWVARIABLECBS_DROPDOWNLIST

順番に、CBS_OWNERDRAWFIXEDまたはWindows テーマのサポートを即座に失うCBS_OWNERDRAWVARIABLE原因となります。

カラー ピッカーのようにフル カスタム ペイントを行う場合、それで問題ありません。ただし、描画されたテキストのみを置き換えたい場合は、そうではありません。

Windows COMBOBOX コントロールにはこれを回避する方法がないように思われるので、どうすれば Delphi から Windows テーマをシミュレートできるのでしょうか?

DrawThemedBackgroundと関係があると思いますが、Delphi コントロールの本格的な作業を行ってからしばらく経っているので、そこから始める方法についての指針も問題ありません (たとえそれらが私の仮定を無効にしたとしても)。

4

3 に答える 3

2

数年前に、 TurboPower Orpheus ComboBoxにテーマ サポートを追加しました。{$IFDEF VERSION2010}...{$ENDIF} セクション内のコードを見てください。これにより、何が必要かについてかなり良いアイデアが得られるはずです。

于 2013-04-17T20:45:16.220 に答える