Привет всем. Маленькая проблема, не знаю, что и делать. Компонент TListView в режиме vsReport не реагирует на OnColumnDragged!
Дело в том, что хотелось бы прятать колонки по правому клику на header'е. Можно выставить для TListColumn MinWidth = MaxWidth = Width = 0, и тогда колонка становится невидимой. Но тогда можно потянуть за divider (не знаю, как перевести), и колонка преспокойно рястягивается до любых размеров. Более того, колонка снова исчезает, если два раза кликнуть на header'е (не как DoubleClick, а просто два последовательных щелчка).
Поэтому и хотел использовать событие OnColumnDragged, чтобы снова выставлять ширину нужных колонок в 0. Попробовал потом заменить оконную процедуру для list view и сделать такую обработку WM_NOTIFY (из delphiworld.narod.ru):
switch(msg.Msg)
{
case WM_NOTIFY:
{
NMHEADER * nmHdr = (NMHEADER *)msg.LParam;
if (nmHdr->hdr.code == HDN_ENDTRACKW ||
nmHdr->hdr.code == HDN_ENDTRACKA)
{
ListView1->Columns->Items[1]->Width = 0;
Invalidate();
return;
}
else
{
oldWndProc(msg);
}
}
break;
default:
{
oldWndProc(msg);
}
}
Это не помогло.

Кто-нибудь знает, как с этим управится? Может, есть какие-то бесплатные компоненты, где можно посмотреть код? Есть еще вариант — удалять колонки и наново заполнять содержимое, но тогда возникают некоторые проблемы, так как первая колонка в TListView — "особенная", и вообще, не очень красиво, если есть несколько сотен строк, и все это перерисовывается белыми полосами. Благодарен за помощь
Здравствуйте, Аноним, Вы писали:
А> Привет всем. Маленькая проблема, не знаю, что и делать. Компонент TListView в режиме vsReport не реагирует на OnColumnDragged!
Событие OnColumnDragged возникает при
перетаскивании заголовков столбцов, а не при изменении их размеров.
A>Есть еще вариант — удалять колонки и наново заполнять содержимое,
Ну если пользоваться виртуальным режимом, то ничего заново заполнять не надо.
A>но тогда возникают некоторые проблемы, так как первая колонка в TListView — "особенная", и вообще, не очень красиво, если есть несколько сотен строк, и все это перерисовывается белыми полосами. Благодарен за помощь
А если так:
LockWindowUpdate(ListView1.Handle);
try
// Удаление колонки или еще чего-нибудь
finally
LockWindowUpdate(0);
end;
?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, <Аноним>, Вы писали:
А> Привет всем. Маленькая проблема, не знаю, что и делать. Компонент TListView в режиме vsReport не реагирует на OnColumnDragged!
Конечно не по теме, но воспользуйся другими компонентами, Developer Express, например.
P.S.
Глючный этот TListView.
... << RSDN@Home 1.2.0 alpha rev. 643>>