给应用程序赋值图标,想通过读取imageList中的images,代码如下:
        aIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
              aIconData.uID    := UINT(IDI_TRAYICON);
              aIconData.cbSize := sizeof(aIconData);
              aIconData.Wnd    := Self.Handle;
              aIconData.uCallbackMessage := TRAY_CALLBACK;
            //  aIconData.hIcon  := LoadIcon(HInstance, 'MAINICON'); (想从本地读入,Delphi7 Image Edit中只能新建图标,不能加载已存在的图标,故不用 )                 
              img:=Ticon.Create;
              ImageList1.geticon(1,img);
              aIconData.hIcon := Loadimage(HInstance,PAnsiChar(img),IMAGE_ICON,0,0,LR_LOADMAP3DCOLORS);//此段代码有错,Loadimage第二个参数应为icon的路径,但不知如何去写,望贵人指教!谢谢了              aIconData.szTip  := RUNNING';
              Shell_NotifyIcon(NIM_ADD, @aIconData);

解决方案 »

  1.   

    可以试试资源文件来加载ICO
    资源文件加载ICO
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ImgList, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ImageList1: TImageList;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      Bmpindex:integer;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Bmpindex:=0;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var IconSizeX:integer;
        IconSizeY:integer;
        myBmp:TBitmap;
        AndMask:TBitmap;
        XOrMask:TBitmap;
        IconInfo:TIconInfo;
        Icon:TIcon;
        icoS:TStream;
    begin
      if ImageList1.Count<1 then
      begin
        showmessage('ImageList1内没图片。');
        exit;
      end;
      IconSizeX:=GetSystemMetrics(SM_CXICON);
      IconSizeY:=GetSystemMetrics(SM_CYICON);
      myBmp:=TBitmap.Create;
      ImageList1.GetBitmap(Bmpindex,myBmp);
      Bmpindex:=(Bmpindex+1) mod ImageList1.Count;
      AndMask:=TBitmap.Create;
      AndMask.Width:=IconSizeX;
      AndMask.Height:=IconSizeY;
      AndMask.Canvas.Brush.Color:=clBlack;
      AndMask.Canvas.Rectangle(0,0,IconSizeX,IconSizeY);
      XOrMask:=TBitmap.Create;
      XOrMask.Width:=IconSizeX;
      XOrMask.Height:=IconSizeY;
      StretchBlt(XorMask.Canvas.Handle,0,0,IconSizeX,IconSizeY,myBmp.Canvas.Handle,0,0,myBmp.Width,myBmp.Height,SRCCOPY);
      Icon:=TIcon.Create;
      IconInfo.fIcon:=true;
      IconInfo.xHotspot:=0;
      IconInfo.yHotspot:=0;
      IconInfo.hbmMask:=AndMask.Handle;
      IconInfo.hbmColor:=XOrMask.Handle;
      Icon.Handle:=CreateIconIndirect(IconInfo);
      AndMask.Free;
      XOrMask.Free;
      myBmp.Free;
      icoS:=TMemoryStream.Create;
      try
        Icon.SaveToStream(icoS);
        icoS.Position:=0;
        Form1.Icon.LoadFromStream(icoS);
      finally
        icoS.Free;
      end;
      Icon.Free;
    end;end.