所有方法都与系统突出显示蓝色混合。
ImageList1.BlendColor := clGray;
ImageList1.DrawingStyle := dsSelected;
ImageList1.GetIcon(0, icon);
ImageList1.GetIcon(0, icon, dsSelected, itImage);
icon.handle := ImageList_GetIcon(ImageList1.Handle, 0, ILD_SELECTED);
所有方法都与系统突出显示蓝色混合。
ImageList1.BlendColor := clGray;
ImageList1.DrawingStyle := dsSelected;
ImageList1.GetIcon(0, icon);
ImageList1.GetIcon(0, icon, dsSelected, itImage);
icon.handle := ImageList_GetIcon(ImageList1.Handle, 0, ILD_SELECTED);
BlendColor
属性由Draw
ImageList(或DrawOverlay
)的方法使用。
ImageList1.Draw(Canvas, 0, 0, 0);
将使用您在“dsSelected”或“dsFocus”中指定的BlendColor
颜色DrawingStyle
。
当您请求系统这样做时,系统会使用系统颜色,例如“突出显示”、“选定”……因此,您对 winapi 函数的调用将如此。
由于没有从 ImageList 请求混合图标的内置方法,您可以请求它在位图上为您进行混合,然后将其转换为图标。例如,您可以在此处找到使用临时图像列表的示例,或在此处找到。或者,您可以获取列表以绘制图像及其蒙版以将它们组合成一个图标,可能如下所示:
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;