Главная страница
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.021 c
14-67449
VEG
2003-04-04 17:02
2003.04.21
На чем такое можно написать?


8-67391
kpo
2003-01-19 13:39
2003.04.21
вставка flash ролика


1-67212
dolmat
2003-04-10 17:23
2003.04.21
RichEdit строки различным цветом програмно


7-67597
GRS
2003-02-19 20:58
2003.04.21
Кнопка ПУСК смена tooltip


7-67605
Dmitriy_R
2003-02-26 09:18
2003.04.21
Диск в СД роме