更改Listview项目高度

时间:2011-04-06 16:24:48

标签: delphi listview

我需要在每个列表项之间腾出更多空间。是否可以在Delphi中更改Listview项目高度?

2 个答案:

答案 0 :(得分:7)

您的TListView处于什么模式? (有4种情况,不同模式的情况会发生变化 - 这就是为什么首先存在不同模式的原因。)

既然你在询问身高,我猜你正处于vsList模式。在这种情况下,每行的高度由SmallImages Imagelist的高度决定。您可以通过为ImageList指定较高的图像来更改行高。

答案 1 :(得分:2)

Delphi TListView控件是Microsoft控件的包装器。它来自TCustomMultiSelectListControl。虽然TListView没有公开ItemHeight属性,但TCustomMultiSelectListControl也是TListBox的祖先,它确实公开了这个属性。

TListBox的ItemHeight属性在TCustomListBox(它来自TCustomMultiSelectListControl)中实现。尽管该属性不在共同的祖先中,但是通过MSDN的过程似乎表明标准列表视图和列表框控件共享许多消息,其中包括LB_SETITEMHEIGHT。不幸的是,这个消息在VCL中找不到。

从粗略地看一下TCustomListBox中SetItemHeight的实现以及在该类中使用(F)ItemHeight,我需要:

  • 创建TListView后代
  • 使用getter和setter
  • 添加您自己的ItemHeight属性
  • 沿着TCustomListBox的行实现getter和setter,这涉及导致在setter中重新创建控件的句柄
  • 覆盖/重新实现CN_MEASUREITEM的处理程序以适当地使用(F)ItemHeight
  • 覆盖/重新实现paint方法以使用(F)ItemHeight(视情况而定)
  • 我粗略看了一眼我忽略的任何事情

总而言之,这不是一个简单的练习。如果您的应用允许,并且您可以切换为TListBoxTColumnListBox,那么您的任务将变得更加轻松......

<强>更新

看到Ken的回答。当然使用ImageList更改ItemHeight是vsList模式是一种更容易的方法!