如何使用OwnerData true处理TListView中的默认列自动调整大小

时间:2012-01-29 20:12:20

标签: delphi tlistview

我有一个TListView(在报告模式下),我在虚拟模式下使用(OwnerData:= True)。除了我知道的自动自动调整列的两种情况之外,一切都很好。他们是:

  1. 双击标题列分隔符以自动调整单个列
  2. Ctrl-KeypadPlus键可自动调整所有列。
  3. 在虚拟模式下这些事件的默认处理并不真正起作用(它似乎在第一行数据上自动调整大小。)我想挂钩行为并进行自己的列自动调整。有谁知道这是怎么做到的吗?或许我错过了一些明显的东西?我正在使用Delphi XE。感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

虚拟列表视图控件的自动调整大小列是使用在执行自动调整操作时可见的所有项目执行的。这就是Delphi TListView控件的行为。尝试在资源管理器中执行相同的操作,您可以很容易地看到这是操作系统标准。

在非虚拟模式下操作列表视图时,执行自动调整大小时会考虑所有行的内容。

我不确定为什么你会观察到仅考虑第一行数据的自动大小。如果这真的是你发生的事情,那么我认为你的代码中必定存在一些我们需要看到的错误。


您的问题似乎是Windows XP错误。就我所见,虚拟列表视图在XP上无法正确执行自动调整大小。我认为探险家在XP和Vista之间从非虚拟切换到虚拟,我不介意打赌探险队有足够的内部杠杆来解决问题。

据我所知,您没有收到自动调整大小的通知,所以我认为您可能很难解决问题。如果您想进一步追求这一点,那么您可以尝试回复标题控件的HDN_DIVIDERDBLCLICK通知并列出 CTRL + 。但是,我不确定这种方法是否会产生任何乐趣。