BlendColor
свойство используется в Draw
способе ImageList (или DrawOverlay
).
ImageList1.Draw(Canvas, 0, 0, 0);
будет использовать цвет, указанный в BlendColor
когда является 'dsSelected' или 'dsFocus'.
Система, когда вы ее запрашиваете, использует системные цвета, такие как «выделить», «выбрано» ... Следовательно, ваш вызов функции winapi будет таким.
Поскольку нет встроенного способа запросить смешанный значок из ImageList, вы можете запросить его для смешивания для вас по растровому изображению, а затем преобразовать его в значок. Например, вы можете найти пример here, который использует список временных изображений, или here. Или вы можете получить список, чтобы нарисовать изображение и его маску, чтобы объединить их в значок, возможно, как показано ниже:
var
Icon: TIcon;
Bmp: TBitmap;
MaskBmp: TBitmap;
IconInfo: TIconInfo;
begin
Icon := TIcon.Create;
Bmp := TBitmap.Create;
try
Bmp.PixelFormat := pf32bit;
Bmp.Canvas.Brush.Color := clBlack;
Bmp.Width := ImageList1.Width;
Bmp.Height := ImageList1.Height;
MaskBmp := TBitmap.Create;
try
MaskBmp.PixelFormat := pf32bit;
MaskBmp.Canvas.Brush.Color := clWhite;
MaskBmp.Width := ImageList1.Width;
MaskBmp.Height := ImageList1.Height;
ImageList1.BlendColor := clRed;
ImageList1.Draw(Bmp.Canvas, 0, 0, 0, dsSelected, itImage);
ImageList1.Draw(MaskBmp.Canvas, 0, 0, 0, dsNormal, itMask);
IconInfo.fIcon := True;
IconInfo.hbmMask := MaskBmp.Handle;
IconInfo.hbmColor := Bmp.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);
finally
MaskBmp.Free;
end;
finally
Bmp.Free;
end;
end;