我有一个在虚拟模式下使用的TListView(在报告模式下)(OwnerData:= True)。除了我知道的自动调整列大小的两种情况外,所有方法都运行良好。他们是:

  • 双击标题列分隔符以自动调整单个列的大小
  • Ctrl-KeypadPlus键可自动调整所有列的大小。

  • 在虚拟模式下,对这些事件的默认处理实际上并不起作用(它似乎在数据的第一行自动调整大小。)我想了解一下行为并进行自己的列自动调整大小。有谁知道这是怎么做到的吗?还是我缺少明显的东西?我正在使用Delphi XE。感谢您的任何建议。

    最佳答案

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

    在非虚拟模式下操作 ListView 时,执行自动调整大小时将考虑所有行的内容。

    我不确定为什么您只考虑第一行数据的自动调整大小。如果这确实是您正在发生的事情,那么我认为您的代码中肯定有错误,我们需要看看。

    您的问题似乎是Windows XP错误。据我所知,虚拟 ListView 无法在XP上正确执行自动调整大小。我认为在XP和Vista之间,资源管理器已从非虚拟方式转换为虚拟方式,我不介意打赌资源管理器团队具有足够的内部杠杆作用来解决问题。

    据我所知,您没有收到有关自动调整大小的通知,因此,我认为您可能很难解决该问题。如果要进一步进行此操作,则可以尝试响应头控件的 HDN_DIVIDERDBLCLICK 通知和CTRL +的列表。但是,我不确定该方法是否会带来任何快乐。

    10-06 04:06