首页  编辑  

ImageList的Disable图像列表

Tags: /超级猛料/VCL/Control.控件使用开发和第三方控件/控件使用技巧/   Date Created:
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;

// Example:
procedure TForm1.FormCreate(Sender: TObject);
begin
 ToolBar1.DisabledImages := DisabledImages(ImageList1);
end;