1

当使用 TListView 并且主题在应用程序中被禁用时,焦点和选定的项目显示如下:

在此处输入图像描述

注意两个图像中三角形所在的位置。项目的绘制框不会在图标出现的位置绘制。在 TListBox 中,绘制的项目填充整个选定项目。

我如何才能填充所选项目的图标部分,就像处理文本部分一样?

我知道 TListBox 是这样渲染的,但我需要对 Data 属性使用 TListView,TListView 也可以通过 TImageList 更好地处理图标。

谢谢。

4

1 回答 1

4

您需要使用 TListView 的OnCustomDraw事件。在事件处理程序中:

  1. 判断项目是否被选中
  2. 判断控件是否有焦点
  3. 如果选择了项目,则绘制适当的选择矩形(如果未选择控件,则为灰色,如果已选择,则为蓝色)
  4. 绘制文字
  5. 使用 TImageList.Draw 从图像列表中绘制图像

有一些方法可以做这些事情,例如 DrawText 和 FillRect。

请注意,如果您愿意,可以使用 TListBox 而不是 TListView。您表示您需要列表中项目的 Data 属性,我假设将它们绑定到您的实际模型对象。您可以使用TStrings.Objects对任何支持 TStrings(例如 TListBox.Items)的东西执行此操作。

于 2011-08-20T16:07:30.790 回答