TListView - изменение размера колонки
От: Аноним  
Дата: 25.01.06 07:49
Оценка:
Привет всем. Маленькая проблема, не знаю, что и делать. Компонент 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 — "особенная", и вообще, не очень красиво, если есть несколько сотен строк, и все это перерисовывается белыми полосами. Благодарен за помощь
Re: TListView - изменение размера колонки
От: ekamaloff Великобритания  
Дата: 25.01.06 12:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Привет всем. Маленькая проблема, не знаю, что и делать. Компонент 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
Re: TListView - изменение размера колонки
От: AlekseyVP Россия  
Дата: 21.02.06 08:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Привет всем. Маленькая проблема, не знаю, что и делать. Компонент TListView в режиме vsReport не реагирует на OnColumnDragged!

Конечно не по теме, но воспользуйся другими компонентами, Developer Express, например.

P.S.
Глючный этот TListView.
... << RSDN@Home 1.2.0 alpha rev. 643>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.