我有一个TListView(在报表模式下),我正在虚拟模式下使用它(OwnerData:= True)。除了我所知道的两种情况可以自动调整列大小之外,一切正常。它们是:
- 双击标题列分隔符以自动调整单个列
- Ctrl-KeypadPlus键自动调整所有列。
虚拟模式下的这些事件的默认处理方式似乎并不起作用(它似乎会在数据的第一行自动调整大小)。我想钩入该行为并执行自己的列自动调整。有人知道如何做到这一点吗?或者我可能错过了一些明显的东西?我正在使用Delphi XE。谢谢任何建议。
我有一个TListView(在报表模式下),我正在虚拟模式下使用它(OwnerData:= True)。除了我所知道的两种情况可以自动调整列大小之外,一切正常。它们是:
虚拟模式下的这些事件的默认处理方式似乎并不起作用(它似乎会在数据的第一行自动调整大小)。我想钩入该行为并执行自己的列自动调整。有人知道如何做到这一点吗?或者我可能错过了一些明显的东西?我正在使用Delphi XE。谢谢任何建议。
对于虚拟列表视图控件,自动调整列大小是使用在执行自动调整操作时可见的所有项目。 这是 Delphi TListView
控件的行为。 尝试在资源管理器中执行相同的操作,您可以轻松看到这是操作系统标准。
当您在非虚拟模式下操作列表视图时,将在执行自动调整大小时考虑所有行的内容。
我不确定为什么您观察到自动调整大小仅考虑第一行数据。 如果这确实是您遇到的情况,那么我认为您的代码可能有问题,我们需要查看它。
您的问题似乎是Windows XP的一个bug。据我所见,虚拟列表视图在XP上不能正确执行自动调整大小。我认为,资源管理器在XP和Vista之间从非虚拟切换到虚拟,而且我敢打赌,资源管理器团队有足够的内部影响力来解决这个问题。
据我所知,您不会收到正在进行自动调整大小的通知,因此我认为很难解决这个问题。如果您想进一步追究此事,则可以尝试响应标题控件和CTRL +列表的HDN_DIVIDERDBLCLICK
通知。但是,我不确定该方法是否会产生任何成果。