怎样把应用程序的图标添加到托盘里去呢

解决方案 »

  1.   

    const 
     {托盘图标常量}
       Icon_ID=1;           //图标标识
       MI_ICONEVENT=WM_USER+$1000;        //消息ID
      {托盘图标处理}
        NormalIcon:TIcon; //托盘图标
        procedure InstallIcon;   //安装托盘图标
        procedure unInstallIcon; //卸载托盘图标
        procedure IconOnClick(var message:TMessage);message MI_ICONEVENT;  //托盘图标响应//--------安装托盘图标--------//
    procedure TMainForm.InstallIcon;
    var IconData:TNotifyIconData;
    begin
      NormalIcon:=TIcon.Create;
      NormalIcon:=Self.Icon;
      IconData.cbSize:=SizeOf(IconData);
      IconData.Wnd:=Handle;
      IconData.uID:=Icon_ID;
      IconData.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
      IconData.uCallBackMessage:=MI_ICONEVENT;
      IconData.hIcon:=NormalIcon.Handle;
      IconData.szTip:=';
      Shell_NotifyIcon(NIM_ADD,@IconData);
    end;//--------卸载托盘图标--------//
    procedure TMainForm.unInstallIcon;
    var IconData:TNotifyIconData;
    begin
      IconData.cbSize:=SizeOf(IconData);
      IconData.Wnd:=Handle;
      IconData.uID:=Icon_ID;
      Shell_NotifyIcon(NIM_DELETE,@IconData);
    end;
    //--------处理托盘图标的事件--------//
    procedure TMainForm.IconOnClick(var message:TMessage);
    var p:TPoint;
    begin
      if message.LParam=WM_LBUTTONDOWN then   //单击事件
        begin
        GetCursorPos(p);
        PopupMenu2.popup(p.x,p.y);
        end;
      if message.LParam=WM_LBUTTONDBLCLK then  //双击事件
        ShowMainForm;
      if message.LParam=WM_RBUTTONDOWN then //右击事件
        begin
        GetCursorPos(p);
        PopupMenu1.popup(p.x,p.y);
        end;
    end;
      

  2.   

    1: 向系统托盘中加入图标控制菜单 :
      向系统托盘中加入图标控制菜单须用到函数 Shell_NotifyIconA,而这个函数又有两个参数 :'TnotifyIconDataA' 结构的参数和一个消息参数即 :Shell_NotifyIconA(dwMessage:DWORD;lpData:PNotifyIconDataA),第一个参数 dwMessage 可以是以下值 :NIM_ADD: 增加一个图标  ;NIM_MODIFY: 修改一个已有的图标  ;NIM_DELETE: 删除一个已有的图标  ;
      第二个参数的 TnotifyIconDataA 结构如下 :
    TnotifyIconDataA=record
    cbSize:DWORD; { 表示该结构的长度 }
    Wnd:HWND; { 是调用 Shell_NotifyIconA 函数的窗口的句柄即 Handle}
    iID:UINT; { 是在下面的 uCallbackMessage 参数指定的消息中使用的一个自定义数值 }
    uFlags:UINT; { 决定该结构中的有效部分,如有 NIF_MESSAGE 则  uCallbackMessage 参数有   效  ; 若有 NIF_ICON  则 hIcon 有效 ; 有  NIF_TIP 则  szTip 参数有效,当然你可   以让这三个参数都有效只须要在这个参数中写成 NIF_MESSAGE+NIF_ICON+NIF_TIP 即可 }
    uCallbackMessage:UNIT; { 当添加的图标上有鼠标事件如右击等等时系统向 Wnd 参数所指定的窗口发   送消息,这个消息的 Msg 参数是 uCallbackMessage,这个消息的 wParam 参数是  uID,这个消息的 lParam 参数是鼠标事件的  Msg 值 }
    Icon:HICON; { 是出现在系统托盘中的图标的句柄即 handle}
    szTip:array[0..63] of AnsiChar; { 即 delphi 是常用的 hint 即当鼠标停留在托盘图标上时的提示,例如你可用   ‘这是我的第一个托盘图标菜单’} 
    end;