1

TListViewを使用していて、アプリケーションでテーマが無効になっている場合、フォーカスされて選択されたアイテムは次のように表示されます。

ここに画像の説明を入力してください

両方の画像で三角形がどこにあるかに注意してください。アイテムのペイントされたボックスは、アイコンが表示される場所には描画されません。TListBoxでは、ペイントされたアイテムが選択されたアイテム全体に表示されます。

テキスト部分の場合と同じように、選択したアイテムのアイコン部分を塗りつぶすにはどうすればよいですか?

TListBoxがこのようにレンダリングされることは知っていますが、DataプロパティにTListViewを使用する必要があります。また、TListViewはTImageListを介してアイコンをより適切に処理します。

ありがとう。

4

1 に答える 1

4

TListViewのOnCustomDrawイベントを使用する必要があります。イベントハンドラー内:

  1. アイテムが選択されているかどうかを確認します
  2. コントロールがフォーカスされているかどうかを確認します
  3. アイテムが選択されている場合は適切な選択長方形を描画します(コントロールが選択されていない場合は灰色、選択されている場合は青色)
  4. テキストを描く
  5. TImageList.Drawを使用して画像リストから画像を描画します

DrawTextやFillRectなど、これらのことを行うためのメソッドがあります。

必要に応じて、TListViewではなくTListBoxを使用できることに注意してください。リスト内のアイテムにDataプロパティが必要であると指定しましたが、実際のモデルオブジェクトにそれらを結び付けると仮定します。これは、TStrings.Objectsを使用して、 TStringsをサポートするもの(TListBox.Itemsなど)で実行できます。

于 2011-08-20T16:07:30.790 に答える