create 'disabled ImageList' at run time?
function DisabledImages(AImageList: TCustomImageList): TImageList;
const
MaskColor = 5757;
var
ImgList: TImageList;
ABitmap: TBitmap;
i: Integer;
function ConvertColor(AColor: TColor): TColor;
var
PixelColor, NewColor: Integer;
begin
PixelColor := ColorToRGB(AColor);
NewColor := Round((((PixelColor shr 16) + ((PixelColor shr 8) and $00FF) +
(PixelColor and $0000FF)) div 3)) div 2 + 96;
Result := RGB(NewColor, NewColor, NewColor);
end;
procedure ConvertColors(ABitmap: TBitmap);
var
x, y: Integer;
begin
for x := 0 to ABitmap.Width - 1 do
for y := 0 to ABitmap.Height - 1 do
begin
ABitmap.Canvas.Pixels[x, y] :=
ConvertColor(ABitmap.Canvas.Pixels[x, y]);
end;
end;
begin
ABitmap := TBitmap.Create;
try
ImgList := TImageList.Create(nil);
ImgList.Width := AImageList.Width;
ImgList.Height := AImageList.Height;
ImgList.Clear;
for i := 0 to AImageList.Count - 1 do
begin
ABitmap.Canvas.Brush.Color := MaskColor;
ABitmap.Canvas.FillRect(rect(0, 0, AImageList.Width, AImageList.Height));
AImageList.GetBitmap(i, ABitmap);
ConvertColors(ABitmap);
ImgList.AddMasked(ABitmap, ConvertColor(MaskColor));
end;
Result := ImgList;
finally
ABitmap.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ToolBar1.DisabledImages := DisabledImages(ImageList1);
end;