Imagelist & API & Listview

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Imagelist & API & Listview

Сообщение Alexanbar » 10.07.2004 (Сб) 13:08

1) Можно ли добавлять иконки в Imagelist через API? Дело в том, что если Imagelist связан с Listview, то при добавлении иконки через VB меняется расстояние между колонками в режиме Lvwlist на установленное по умолчанию разработчиками.
2) Более того, прокрутка перестаёт правильно работать - нужно как-то перепривязать её к Listview

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 10.07.2004 (Сб) 20:30

1.Попробуй перепривязать ImageList к своему ListView:
Код: Выделить всё
set Me.lvw_List.ImageList = Nothing
set Me.lvw_List.ImageList = Me.ilt_Icons

Ну и рефреш списку, ясен пень.
2. А это как именно? Ни разу просто не работал с ListView в этом режиме отображения, поэтому не видел такого.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 11.07.2004 (Вс) 20:49

Что мне не нравится в Listview в режиме Lvwlist (и не только в этом режиме) - это троеточие (... )в конце длинных текстов у элементов -просто бесит.

Как я с этим борюсь? Вначале нахожу максимальную длину текста, затем посылаю сообщение LVM_SECOLUMNWIDTH. В режиме Lvwlist изменяется расстояние между колонками на то, которое нужно.

Если после этого попытаться в Imagelist добавить новую иконку, колонки опять схлопываются, т.е. опять появляются троеточия.

Если вновь послать сообщение LVM_SECOLUMNWIDTH, то часто получается так, что расстояние-то между колнками восстанавливается, но при пермещении прокрутки, например, в крайнее левое положение, первая колонка будет не на нулевом расстоянии, а несколько продвинута вправо.
Правильное положение прокрутки получается, только, если она находится в момент добавления новых иконок в крайнем левом положении.
Другой глюк - при отматывании прокрутки в крайнее правое положение последняя колонка может быть либо прокручена наполовину, либо вообще не видна.

Промежуточные колонки могут иногда только хвосты показывать, а начала их не видно.

--------------------------------------------------------------------------------

Сегодня весь день посвятил альтернативному варианту - отказался от родной прокрутки Listview вообще и использовал контрол Scrollbar.

Для этого Listview1 поместил на Picturebox , а ширину Listview выбирал так, чтобы у элемента Listview родной прокрутки не было, и прокручивал весь Listview внутри Picturebox-а.

Оказывается, так сделать можно не всегда - есть ограничение на максимальную длину Listview - 16384 пикселя. Поэтому, если, напрмер, в Listview загрузить каталог C:\Windows\System32 , то в любом случае родные прокрутки будут (визуально их, конечно, спрятать можно).

Для чего, собственно, мне нужно добавлять иконки после того, как все элементы в Listview добавлены? Для того, чтобы их можно было быстрее добавить с "дежрными" икноками, а затем, по мере прокручивания, извлекать родные иконки.

--------------------------

А делать Set Listview1.Imagelist =Nothing нельзя - нет смысла

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.07.2004 (Пн) 19:03

А почему не использовать стиль lvwReport?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 12.07.2004 (Пн) 23:27

Так больше помещается на странице при условии, что элементы не очень большие по названию, да и просто больше нравится, а также для тог, чтобы пользователь мог выбрать этот вариант, если он ему по вкусу.
Можно, наверное, на самом деле использовать LVvreport, но вторую и следующие колонки добавлять как subitems (как это делается в Norton Commander в режиме показа краткого списка) , да спрятать Columnheader-ы, но это потребует коренных изменений в большой программе, хотя свои плюсы в этом будут - можно будет подбирать индивидульно ширину каждой колонки. Одного боюсь - что есть ограничение на максимальное кол-во Columnheader-ов.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList  
cron