Причина в том, что API-функция ImageList_DrawEx получает из TImageList не совсем верный формат TBitmap (ещё не разобрался, почему).
Следующий код
- Код: Выделить всё
ImageList_DrawEx(smallimage.Handle, imgIndex, Form1.Canvas.Handle, x, y, 0, 0, clNone, clNone, ILD_Transparent)
Вот такой вариант:
- Код: Выделить всё
var
aBitmap: TBitmap;
UseMaskHandle: HBitmap;
begin
aBitmap:= TBitmap.Create;
smallimage.GetBitmap(imageIndex, aBitmap);
UseMaskHandle:=aBitmap.MaskHandle;
MaskBlt(ToolButton3.Canvas.Handle,5,5,aBitmap.Width, aBitmap.Height, aBitmap.Canvas.Handle,0,0,UseMaskHandle,0,0);
aBitmap.Free;
end;
тоже работает только с картинками, у которых палитра >4 bit.
В то же время этот код прекрасно работает с 4-битными картинками, если вместо ImageList использовать контейнер Image:
- Код: Выделить всё
aBitmap.Assign(Image1.Picture.Bitmap);
Какие варианты? Может, кто богат решением? Заведомо благодарю.
P.S.
Убедительная просьба: в качестве решения не предлагать использовать сторонние компоненты. Не в этом цель..