powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертация Icon(resource) -> Icon(long) -> ImageList и обратно ImageList->Icon(long)
1 сообщений из 1, страница 1 из 1
Конвертация Icon(resource) -> Icon(long) -> ImageList и обратно ImageList->Icon(long)
    #38274053
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот тут (конкретно куда указывает ссылка):
А вообще иконки в VB6 меню тяжело добавить?
попытался (в целом успешно) использовать API-ImageList для хранения иконок которые используются в меню.
Я уже от этой идеи отказался по ряду причин.

Но может мне кто-нибудь объяснить глюк с кот. я столкнулся.

Простой вариант, на кот. и остановился состоит в том, чтоб тупо достать иконку и отрисовать ее на hdc:
Код: vbnet
1.
2.
3.
          lngIcon = LoadImage(App.hInstance, MAKEINTRESOURCE(IIf(item_disabled, 117, 107)), _
             IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR)
          DrawIconEx dM.hdc, ...  lngIcon, 16, 16,  0, 0, DI_NORMAL


Этот вариант безупречен.

================
Второй вариант (показался мне удобным).
1) Берем иконки из ресурсов, и наполняем ими ImageList (как я всегда делаю для Listview):
Код: vbnet
1.
2.
3.
4.
5.
    m_MENU_iml = ImageList_Create(16, 16, ILC_MASK Or ILC_COLOR32, 7, 0)
    lngIcon = LoadImage(App.hInstance, MAKEINTRESOURCE(101), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR)
    ImageList_ReplaceIcon m_MENU_iml, -1, lngIcon 'START=0
    DestroyIcon lngIcon
...


2) Ну и по мере необходимости достаем lngIcon и как в варианте 1 рисуем на hdc
Вот так достаем:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Const ILD_NORMAL = &H0
   
Public Declare Function ImageList_GetIcon Lib "COMCTL32.DLL" ( _
 ByVal himl As Long, _
 ByVal i As Long, _
 ByVal diFlags As Long) As Long
...
  lngIcon = ImageList_GetIcon(IIf(item_disabled, m_MENU_iml_BW, m_MENU_iml), 0, ILD_NORMAL)


Все это заработало, но при добавлении в проект одна иконка сглючила (т.е. чуть размылась по краям - но было заметно).
Эксперимент с той же иконкой по методу 1 такого же эффекта "глючности" не дал.

При этом та же иконка при добавлении на кнопку Toolbar (из ImageList) ведет себя прилично.
И что самое странное, я НЕ сумел воспроизвести эффект в тестовом приложении конкретно с этой же иконкой и тем же кодом (два нижние пункта меню).

Где собака зарыта? Как вообще иконки в ImageList хранятся. Предполагаю что метод 2 (ImageList_ReplaceIcon, ImageList_GetIcon ) делает двойную перерисовку и есть вероятность что ВЫХОД не равно ВХОД (и даже не тупая копия входа).
Пояснит кто?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертация Icon(resource) -> Icon(long) -> ImageList и обратно ImageList->Icon(long)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]