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

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

Выравнивание колонок ListView по содержимому [D7, XP]


Страницы:   1 2 3 4

Aleks ©   (2009-10-26 15:31:00) 

Как выравнять колонки ListView по содержимому? Нашел такой код:
ListView1.SetFocus;
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(VK_ADD, 0, 0, 0);
keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Отлично работает,но не учитывает текст в шапке списка :(
и после автовыравнивания приходится еще и ручно раздвигать колонки чтобы прочитать обрезаный текст в шапке.


Юрий Зотов   (2009-10-29 11:06:00) [61]

Handle чей передаете? Формы?

Видимо, формы. Вот окно формы эту команду и получает. Теперь вопрос - а как окно формы может ее выполнить, ежели ни о каких колонках оно и понятия не имеет?

Разве не очевидно, что команду должно получить окно ListView? Значит, и передавать нужно ListView1.Handle.

Совершенству, конечно, предела нет. Но думать все равно нужно.


Aleks   (2009-10-29 10:54:00) [62]

Написал так:
for i := 0 to ListView1.Columns.Count -1 do
ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);
Но почему-то все-равно не работает :( Ни хидер не раздвигает по ширине заголовков, ни колонки по ширине содержимого. Вызываю цикл после заполнения списка данными.(юсес прописал)


Aleks   (2009-10-29 10:46:00) [63]

Совершенству нет предела.. Бум знать,Спасибо Большое за помощь Юрий!


Юрий Зотов   (2009-10-28 18:50:00) [64]

> Aleks   (28.10.09 17:45) [5]

uses ..., CommCtrl;

Не стыдно?


Aleks   (2009-10-28 17:45:00) [65]

ListView_SetColumnWidth - неизвестный идентификатор (ошибка компилирования) :(


Aleks   (2009-10-27 10:18:00) [66]

Спасибо большое! Буду пробывать for i := 0 to ColumnCount -1 do
 ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);


Юрий Зотов   (2009-10-26 18:47:00) [67]

> Aleks   (26.10.09 18:19) [2]

После выполнения Вашего кода пройти в цикле по колонкам, и у тех колонок, где ширина текста в заголовке больше ширины самой колонки, выставить новую ширину колонки.

Но гораздо лучше использовать макрос ListView_SetColumnWidth, а не Ваши археологические раскопки (я в шоке: это ж надо такое придумать - управлять контролом через эмуляцию клавиш).

Описание ListView_SetColumnWidth см. в MSDN, там все очень просто, например:

for i := 0 to ColumnCount -1 do
  ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);


Aleks   (2009-10-26 18:19:00) [68]

Выставлять после заполнения списка ListView данными программно ширину Canvas.TextWidth? Или как? Я не очень понимаю как это можно сделать :(


clickmaker   (2009-10-26 15:50:00) [69]

> но не учитывает текст в шапке списка

значит, самому нужно учесть. см. Canvas.TextWidth


Страницы:   1 2 3 4

Наверх

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