Delphi TListView项目焦点主题化

Delphi TListView项目焦点主题化,delphi,listview,tlistview,Delphi,Listview,Tlistview,使用TListView时,如果应用程序中禁用了主题,则聚焦的选定项目将显示如下所示: 请注意这两幅图中三角形的位置。项目的已绘制框不会在图标出现的位置绘制。在列表框中,绘制的项目填充整个选定项目 我如何才能像填充文本部分一样,填充所选项目的图标部分 我知道TListBox是这样呈现的,但是我需要对Data属性使用TListView,而且TListView通过TImageList更好地处理图标 谢谢。您需要使用TListView的事件。在事件处理程序中: 确定是否选择了该项 确定控件是否聚焦 如

使用TListView时,如果应用程序中禁用了主题,则聚焦的选定项目将显示如下所示:

请注意这两幅图中三角形的位置。项目的已绘制框不会在图标出现的位置绘制。在列表框中,绘制的项目填充整个选定项目

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

我知道TListBox是这样呈现的,但是我需要对Data属性使用TListView,而且TListView通过TImageList更好地处理图标

谢谢。

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

  • 确定是否选择了该项
  • 确定控件是否聚焦
  • 如果选择了项目,则绘制相应的选择矩形(如果未选择控件,则为灰色;如果未选择控件,则为蓝色)
  • 画课文
  • 使用TImageList.Draw从imagelist中绘制图像
  • 有一些方法可以做这些事情,比如DrawText和FillRect

    请注意,如果愿意,您可以使用TListBox而不是TListView。您表示需要列表中项目的数据属性,我假设将它们与实际的模型对象绑定在一起。您可以使用支持TString的任何内容(如TListBox.Items)来完成此操作。

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

  • 确定是否选择了该项
  • 确定控件是否聚焦
  • 如果选择了项目,则绘制相应的选择矩形(如果未选择控件,则为灰色;如果未选择控件,则为蓝色)
  • 画课文
  • 使用TImageList.Draw从imagelist中绘制图像
  • 有一些方法可以做这些事情,比如DrawText和FillRect


    请注意,如果愿意,您可以使用TListBox而不是TListView。您表示需要列表中项目的数据属性,我假设将它们与实际的模型对象绑定在一起。您可以使用任何支持tstring的东西(例如TListBox.Items)来实现这一点使用。

    使用组件的自定义绘图工具。使用组件的自定义绘图工具。+1我刚刚阅读了您答案的底部,看到答案的第二部分与我后面的答案相同。+1我刚刚阅读了您答案的底部,看到答案的第二部分与我后面的答案相同回答。