Главная страница
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.023 c
9-67076
NEOMEN
2002-11-20 19:27
2003.04.21
Могу помочь


14-67470
race1
2003-04-06 13:42
2003.04.21
stretch wallpaper


1-67384
Anton.
2003-04-10 09:42
2003.04.21
как передать параметр из одного работающего приложения в другое


6-67413
Kremen
2003-02-28 05:12
2003.04.21
Определение IP тачи имея только её имя


14-67493
Cobalt
2003-04-03 14:37
2003.04.21
Отношения к людям