像winrar在后台执行时那样,显示进度条,不会是每个刻度用一个ico图像吧?
如果用绘图实现,托盘程序如何在运行时给“自己的”图标绘图?

解决方案 »

  1.   

    运行时动态画程序图标,甚至可做成动画:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        vHICO:HICON;
        Img1: TImage;
        Img2: TImage;
        Img3: TImage;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Img1:= TImage.Create(Self);
      Img2:= TImage.Create(Self);
      Img3:= TImage.Create(Self);
      Img1.Height :=32;
      Img1.Width  :=32;
      Img2.Height :=32;
      Img2.Width  :=32;
      Img3.Height :=32;
      Img3.Width  :=32;
      DrawIcon(Img1.Canvas.Handle,0,0,Application.Icon.Handle);
      Img3.Canvas.Brush.Color:=clBtnFace;
      Img3.Canvas.FillRect(Img3.ClientRect);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      if vHICO<>0 then
      DestroyIcon(vHICO);
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var aicf:ICONINFO;
        X:integer;
        aRect:TRect;
    begin
      X:=Random(100);
      Img2.Picture.Bitmap.Assign(Img1.Picture.Bitmap);
      aRect.Left  :=8;
      aRect.Right :=25;
      aRect.Bottom:=32;
      aRect.Top   :=2+(X * 30 div 100);
      Img2.Canvas.Brush.Color:=clBlue;
      Img2.Canvas.FillRect(aRect);
      GetIconInfo(Application.Icon.Handle,aicf);
      //aicf.fIcon:=True;
      //aicf.xHotspot:=16;aicf.yHotspot:=16;
      aicf.hbmMask :=Img3.Picture.Bitmap.Handle;
      aicf.hbmColor:=Img2.Picture.Bitmap.Handle;
      if vHICO<>0 then
        DestroyIcon(vHICO);
      vHICO:=CreateIconIndirect(aicf);
      Application.Icon.Handle := vHICO;
      //DestroyIcon(vHICO);
      //vHICO:=0;
    end;end.