Событие после изменения размера столбца TListView

Я пытаюсь вызвать событие после изменения размера столбца в TListView, установленном на ViewStyle = vsReport.

В частности, у меня есть два ListView, в которых я хочу, чтобы столбцы были одинаковой ширины. Только один listView имеет заголовки столбцов, поэтому событие должно быть связано с ними.

Поковырявшись в доступных процедурах для TListViews, кажется, нет подходящих вариантов...

Любая помощь?


person Dan Kelly    schedule 02.02.2012    source источник
comment
forums.embarcadero.com/message.jspa?messageID=431667   -  person kobik    schedule 02.02.2012
comment
Ура - не думал, что OnCustomDraw сделает это. Отбросьте это как ответ, и я приму   -  person Dan Kelly    schedule 02.02.2012
comment
Нет-нет, используйте то, что разместил там Remy. Вы должны отслеживать HDN_ITEMCHANGED уведомление.   -  person TLama    schedule 02.02.2012
comment
Я скорее думал о решении Реми. Реми должен опубликовать ответ, если он хочет.   -  person kobik    schedule 02.02.2012


Ответы (1)


Подкласс ListView и перехват WM_NOTIFY сообщений, которые отправляются из элемента управления заголовком ListView в ListView, в поисках уведомлений HDN_ENDTRACK и HDN_ITEMCHANGED.

Не путать с CN_NOTIFY сообщениями, которые являются WM_NOTIFY сообщениями, которые ListView отправляет самому себе.

person Remy Lebeau    schedule 02.02.2012
comment
это много кода для достижения чего-то, что должно поставляться с компонентом... - person Sam; 06.06.2013
comment
VCL не включает в себя все, что предоставляет API, и никогда этого не делал. Он включает в себя наиболее распространенные функции, но предоставляет доступ к API, когда требуются более сложные вещи. Большинству пользователей не требуется событие для отслеживания изменения размеров столбца, но есть способ получить эту информацию, когда это действительно необходимо. И это не так уж много кода для выполнения. Это можно сделать максимум с дюжиной строк кода. - person Remy Lebeau; 06.06.2013
comment
Я предполагаю, что я имею в виду вопрос о том, почему проблема изменения размера столбца не ожидалась на этапе проектирования этого компонента. Изменяет ли API размер столбцов по умолчанию? Почему они решили сделать это поведением по умолчанию? Похоже на спорное решение — добавление силы аргументу о том, что это должно было быть реализовано как необязательное поведение. Таблицы (или сетки) являются одним из наиболее распространенных способов представления и/или сбора данных для пользователя и/или от него, и уму непостижимо, почему столбцы с изменяемым размером считаются обязательным поведением при написании спецификации. - person Sam; 07.06.2013
comment
Да, размер столбцов ListView можно изменять по умолчанию на уровне Win32 API. TListView не контролирует это поведение и не перехватывает событие изменения размера, предлагаемое Win32 API (но перехватывает события Win32 API, связанные с перетаскиванием и изменением порядка столбцов). - person Remy Lebeau; 07.06.2013