Listview & Imagelist_Create

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

Listview & Imagelist_Create

Сообщение Alexanbar » 13.02.2005 (Вс) 1:11

Есть Listview из MS Windows Common Controls 6.0. В этом же комплекте находится Imagelist.
При работе этих элементов в связке отрисовка 32 битных иконок происходит некорректно. Возникло желание использовать ф-ю Imagelist_Create.
Но вот беда! Listview подобный Imagrlist полностью игнорирует!!!

Если взятькомплект 5.0, то всё идёт нормально, т.е. переназначаем Imagelist с помощью посылки LVM_Setimagelist, далее это сообщение блокируем, и работаем с программно созданным Imagelist-ом.
Но, как известно, в 5.0 меньше уровень сервиса, да и код сильно менять не хочется.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.02.2005 (Вс) 7:47

Ну что сказать, ну что сказать... (c)

Я вот как написал свой image list, так только его и юзаю :)
А как именно некорректно там всё происходит?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.02.2005 (Вс) 13:41

GSerg, где бы посмотреть на твой ImageList? Я его тоже хочу...
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 13.02.2005 (Вс) 14:36

И мне бы тоже :)
Моду создают модоки, а распространяют модозвоны.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.02.2005 (Вс) 14:58

Во как :)

Ладно, добавлю пару флагов из XP, которые я проигнорил, и выложу в кирпичах :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Alexanbar » 13.02.2005 (Вс) 14:59

Если извлечь иконку для калькулятора, при отображении в Listview образуется дополнительная белая тень (см. рисунок).
В сам Imagrlist иконка записывается правилно (проверял отрисовкой на Picturebox с помощью DrawIconEx).

На vbaccelerator есть Imagеlist и Listview с поддержкой 32битных иконок.
Но там свои глюки, и методы и свойства называются по другому.

Опять же повторюсь:
Listview из 5.0 спокойно берёт Imagelist (через сообзение LVM_SetImagelist) Imagelist-ы, созданные по Imagelist_Create или же Imagelist c vbaccelerator, а Listview6.0 берёт только свои (из 6.0)
У вас нет доступа для просмотра вложений в этом сообщении.

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

Сообщение Alexanbar » 14.02.2005 (Пн) 18:40

Решил начать отрисовку клиентской части Listview, чтобы отрисовать иконки правильно. Постепенно процесс движется. Встретились две трудности:

1. Отрисовка иконок для SelecedItem . Иконки сидят в стандартном Imagelit (6.0). В номальном режиме отрисовываю DrwIconEx.
2. Не получается в режиме lvIcon сделать подписи с тремя точками, если текст не помещается. Ф-я DrawTextEx умеет это делать для однострочного случая.
3. Пока не додумался, как перехватить LabelEdit

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

Сообщение Alexanbar » 15.02.2005 (Вт) 22:06

Для отрисовки иконок у SelectedItem пришлось дойти вот до какого идиотизма:
Создаю фиктивный Imagelist. Добавляю туда иконку, отрисовываю, Удаляю Imagelist.

Private Sub DrawSelectedIcon(ByVal hdc As Long, _
ByVal hIcon As Long, _
ByVal x As Long, y As Long, ByVal dx As Long, ByVal dy As Long)
Dim hIml As Long

hIml = ImageList_Create(dx, dy, ILC_MASK Or ILC_COLOR32, 1, 0)

ImageList_AddIcon hIml, hIcon
'ImageList_ReplaceIcon hIml, -1, hIcon
ImageList_Draw hIml, 0, hdc, x, y, ILD_SELECTED 'Or Or ILD_TRANSPARENT

ImageList_Destroy hIml
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.02.2005 (Ср) 4:05

Зачем каждый раз? Пусть висит себе глобально :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Alexanbar » 16.02.2005 (Ср) 20:58

В принципе, можно. Вместо уничтожения Imagelist-a делать удаление из него иконки.

Насчёт Label_Edit накопал информации в MSDN. Буду разбираться, что препринять.


Вернуться в Компоненты

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

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

    TopList