![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выравнивание колонок ListView по содержимому [D7, XP]
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