Как обработать автоматическое изменение размера столбца в TListView с OwnerData true - PullRequest
5 голосов
/ 30 января 2012

У меня есть TListView (в режиме отчета), который я использую в виртуальном режиме (OwnerData: = True). Все работает хорошо, за исключением двух известных мне ситуаций, когда столбцы автоматически меняются. Это:

  1. Двойной щелчок по разделителю столбца заголовка для автоматического изменения размера одного столбца
  2. Клавиша Ctrl-KeypadPlus для автоматического изменения размера всех столбцов.

Обработка этих событий по умолчанию в виртуальном режиме на самом деле не работает (кажется, что она автоматически изменяет размер в первой строке данных). Я хотел бы подключиться к поведению и сделать мой собственный размер столбца автоматически. Кто-нибудь знает как это сделать? Или, может быть, я упускаю что-то очевидное? Я использую Delphi XE. Спасибо за любые предложения.

1 Ответ

1 голос
/ 30 января 2012

Столбцы авторазмера для элементов управления виртуальным списком выполняются с использованием всех элементов, которые видны во время выполнения операции авторазмера. Это поведение элемента управления Delphi TListView. Попробуйте выполнить ту же операцию в проводнике, и вы сразу увидите, что это стандарт операционной системы.

Когда вы работаете со списком в не виртуальном режиме, содержимое всех строк учитывается при выполнении авторазмера.

Я не уверен, почему вы наблюдаете автоматический размер, учитывающий только первую строку данных. Если это действительно то, что происходит для вас, то я думаю, что в вашем коде должно быть что-то не так, что нам нужно увидеть.


Ваша проблема связана с ошибкой Windows XP. Насколько я вижу, представления виртуального списка не выполняют правильное изменение размера в XP. Я думаю, что проводник переключился с не виртуального на виртуальный между XP и Vista, и я бы не стал спорить, что команда исследователей имела достаточно внутренних рычагов, чтобы решить проблему.

Насколько мне известно, вы не уведомлены о том, что происходит авторазмер, поэтому я думаю, что вам может быть трудно обойти эту проблему. Если вы хотите продолжить это дальше, вы можете попытаться ответить на уведомление HDN_DIVIDERDBLCLICK для элемента управления заголовка и список для CTRL + . Однако я не уверен, принесет ли такой подход какую-либо радость.

...