6

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

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

在虚拟模式下对这些事件的默认处理实际上并不起作用(它似乎在第一行数据上自动调整大小。)我想挂钩该行为并做我自己的列自动调整大小。有谁知道这是怎么做到的吗?或者也许我错过了一些明显的东西?我正在使用德尔福 XE。感谢您的任何建议。

4

1 回答 1

1

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

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

我不确定你为什么只观察第一行数据的自动大小。如果这确实是您正在发生的事情,那么我认为您的代码中一定有问题需要我们查看。


您的问题似乎是 Windows XP 错误。据我所知,虚拟列表视图在 XP 上无法正确执行自动调整大小。我认为资源管理器在 XP 和 Vista 之间从非虚拟切换到虚拟,我不介意打赌资源管理器团队有足够的内部影响力来解决问题。

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

于 2012-01-29T20:28:30.887 回答