Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > HIMAGELIST


Автор: WIN32API 27.5.2006, 13:52
Ребята, помогите выташить с ImageList'а картинку по индексу и поставить ее на кнопку.

Код

var
 hbmp: HBITMAP;
 hImgList: HIMAGELIST;

WM_INITDIALOG: begin
 hbmp := LoadBitmap(hInstance, 'IMG_LIST');
 hImgList := ImageList_Create(16, 16, ILC_COLOR8 or ILC_MASK, 8, 2);
 ImageList_AddMasked(hImgList, hbmp, $00FC02FC);
 DeleteObject(hbmp);

.....

 //Я так понимаю, должно быть что-то вроде:
 SendMessage(IDC_BUTTON, STM_SETIMAGE, IMAGE_BITMAP, ??????????????);

//но что конкртено?????????

 

Автор: bems 27.5.2006, 14:46
твои знаки вопроса это хэндл битмапа. Если у тебя и правда
Цитата(WIN32API @  27.5.2006,  13:52 Найти цитируемый пост)
hbmp := LoadBitmap(hInstance, 'IMG_LIST');
 hImgList := ImageList_Create(16, 16, ILC_COLOR8 or ILC_MASK, 8, 2);
 ImageList_AddMasked(hImgList, hbmp, $00FC02FC);
 DeleteObject(hbmp);
то можно без списка использовать напрямую битмап. Если же нужно вытянуть из списка, то ImageList_GetIcon, а потом из иконки достать битмап
 

Автор: WIN32API 28.5.2006, 09:45
И как это на практике работает?
Ведь ImageList_GetIcon возвращает HICON, а не HBITMAP. 

Автор: bems 28.5.2006, 18:25
Цитата(WIN32API @  28.5.2006,  09:45 Найти цитируемый пост)
И как это на практике работает?
Ведь ImageList_GetIcon возвращает HICON, а не HBITMAP.  

Цитата(bems @  27.5.2006,  14:46 Найти цитируемый пост)
а потом из иконки достать битмап

сделать это например с помощью GetIconInfo (использовать ICONINFO.hbmColor)

Добавлено @ 18:30 
Цитата(bems @  28.5.2006,  18:25 Найти цитируемый пост)
использовать ICONINFO.hbmColor
Для ч/б иконки не подойдет, но у тебя в примере вроде цветной имэйджлист...
 

Автор: WIN32API 29.5.2006, 15:03
Сенкс bems за помощь!!!!
Разобрался. Решение выглядит так:

Код

var
 hbmp: HBITMAP;
 hImgList: HIMAGELIST;
 hButton: HWND:

WM_INITDIALOG: begin
 hbmp := LoadBitmap(hInstance, 'IMG_LIST');
 hImgList := ImageList_Create(16, 16, ILC_COLOR8 or ILC_MASK, 8, 2);
 ImageList_AddMasked(hImgList, hbmp, $00FC02FC);
 DeleteObject(hbmp);

 SendMessage(hButton, BM_SETIMAGE, IMAGE_ICON, 
  ImageList_GetIcon(hImgList, 1{индекс изображения}, ILD_TRANSPARENT));


Всем удачи! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)