给应用程序赋值图标,想通过读取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);
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);
资源文件加载ICO
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.