Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Колонки в TListView [D7]


Fr ©   (2009-07-05 10:56:00) 

Как подогнать ширину колонки в ListView по содержимому?


Эстет   (2009-07-05 14:06:00) [1]

Ага, ясно.


Юрий Зотов   (2009-07-05 13:59:00) [2]

> Эстет   (05.07.09 13:40) [10]

Для оконных контролов отличия, можно сказать, нет. Для графических - только Perform.


Эстет   (2009-07-05 13:40:00) [3]

Юрий, а в чем отличие SendMessage от ListView.Perform, всмысле от ListView.Perform(LVM_SETCOLUMNWIDTH, i, LVSCW_AUTOSIZE)


Юрий Зотов   (2009-07-05 13:14:00) [4]

Конечно.


Fr   (2009-07-05 13:12:00) [5]

с помощью все того же SendMessage?


Юрий Зотов   (2009-07-05 13:07:00) [6]

Возможно, проще делать подгонку в обработчиках AdvancedCustomDraw...
на стадии cdPostPaint (только проследить, чтобы не возникло рекурсии). Тогда все будет подгоняться всегда и автоматически.


Fr   (2009-07-05 12:55:00) [7]

Спасибо! Переклинило меня :)


Юрий Зотов   (2009-07-05 12:44:00) [8]

Значит, в момент FormShow еще нет Items. Вывод - вызывать надо сразу после того, как они появляются.


Fr   (2009-07-05 12:41:00) [9]

Обработчик Tfrm1.ts1Show срабатывает до Tfrm1.FormShow. Но, хотя он и посылает SendMessage, все равно не выравнивает ширину колонки по-содержимому. Ширина колонок выравнивается по ширине названия колонки, не учитывая данные Items.


Юрий Зотов   (2009-07-05 12:12:00) [10]

Вызвать тот же обработчик из FormShow.


Fr   (2009-07-05 12:10:00) [11]

Спасибо. У меня ListView лежит на PageControl. Если поставить SendMessage на обработчик на Tfrm1.ts1Show, то он замечательно отрабатывает при переключении с вкладки на вкладку, а при создании формы, до того, как я ткнусь на вкладку, не хочет ... Как это победить?


Юрий Зотов   (2009-07-05 11:17:00) [12]


uses
 CommCtrl;

procedure TForm1.FormShow(Sender: TObject);
var
 i: integer;
begin
 with ListView1 do
   for i := 0 to Columns.Count - 1 do
     SendMessage(Handle, LVM_SETCOLUMNWIDTH, i, LVSCW_AUTOSIZE_USEHEADER)
end;

Если не нужно учитывать ширину текста заголовков колонок, то LVSCW_AUTOSIZE_USEHEADER заменяем на LVSCW_AUTOSIZE.


Наверх

Титульная страница Поиск, карта сайта Написать письмо