Форум: "Media";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Media";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c