Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.21;
Скачать: CL | DM;

Вниз

32 бита и TImageList   Найти похожие ветки 

 
sj   (2003-01-18 09:50) [0]

Здравствуй уважаемый All;

Имеем Windows 9x/NT/XP при различных цветовых палитрах (256 и более) и Delphi5 UP1.
Цель забрать у богатого Билли иконки и отдать бедным в виде PopupMenu.
Пытаемся реализовать, используя ImageList.


hLib := LoadLibrary(PChar(SystemDirectory + "\shell32.dll"));
hIc := LoadIcon(hLib, MAKEINTRESOURCE(Index);
// возвращает указатель на красивую иконку в зависимости от текущей цветовой палитры

Picture := TPicture.Create;
Picture.Icon.Handle := hIc;
ImageList1.AddIcon(Picture.Icon);
// При 8 и 16 битах всё замечательно, а вот при 32 – имеем потери.


Насколько могу понимать TBitmap не приспособлен для работы с 32 битными картинками.
Сейчас пришлось создать TPicture, перехватить DrawItem и рисовать самому, но очень мне это не нравиться. Если возможно, предложите другие варианты.


 
Ricks ©   (2003-01-19 21:08) [1]

Bitmap как раз предназначен для работы с 32-х битным изображением. Но рисовать его можно только в XP. Делаем так:

uses
..., CommCtrl;

...
ImageList_Create(...);
Imagelist_AddIcon() // по-моему, так называется :-)
ImageList_Draw(...);
Imagelist_Destroy(...);


но при этом в прогамме обязательно должен быть manifest!
Удачи.


 
sj   (2003-01-20 08:41) [2]

Спасибо, был не прав, TBitmap не в чём не виноват :)

himl := ImageList_Create(32, 32, ILC_MASK or ILC_COLOR32, 0, 4);
Imagelist_AddIcon(himl, hicon);
типа такого …

глюки при 32 битах в ХP возникают при использовании маски (ILC_MASK);


 
sj   (2003-01-20 18:51) [3]

Уважаемые Мастера, если Вас не затрудит, посмотрите на этот кусочек текста и объясните, пожалуйста, в чём я не прав.
(XP, Цветовая палитра: 32 бита)

uses
..., CommCtrl;
...
var
hIc, hLib: THandle;
SystemDirectory: PChar;
hIml: THandle;
begin
GetMem(SystemDirectory, MAX_PATH);
GetSystemDirectory(SystemDirectory, MAX_PATH);
hLib := LoadLibrary(PChar(SystemDirectory + "\shell32.dll"));
hIml := ImageList_Create(32, 32, ILC_COLORDDB or ILC_MASK, 0, 4);
Hic := LoadIcon(hLib, MAKEINTRESOURCE(20));
Imagelist_AddIcon(hIml, hIc);
ImageList_Draw(hIml, 0, Self.Canvas.Handle, 0, 0, ILD_NORMAL);
end;


 
Evgeny ©   (2003-01-21 11:20) [4]

Ну что память освободить забыл, наверное уже и сам заметил. Но зачем усложнять. Можно и так:
SystemDirectory: array[Byte] of Char;


 
sj   (2003-01-21 12:38) [5]

да бог с ней с памятью, и с SystemDirectory,
почему не прорисовывается 32 бита



Страницы: 1 вся ветка

Текущий архив: 2003.04.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
14-67563
alex134
2003-04-04 19:09
2003.04.21
Кто писал отладчик?


1-67368
Саша
2003-04-10 09:53
2003.04.21
Как получить кол-во файловв определенной директории?


1-67291
Ifrit
2003-04-01 15:56
2003.04.21
Есть RichEdit. Как определить атрибуты текста который находится п


1-67240
softmaster
2003-04-10 19:35
2003.04.21
Округление


4-67646
fishca
2003-02-20 10:56
2003.04.21
Удаление программы из себя