你要响应消息才行。自定义一个消息,如:WM_USER_TRAYICON为一个整数。增加时加上NIF_MESSAGE标志,IconData.uFlags := IconData.uFlags or NIF_MESSAGE;然后响应WM_USER_TRAYICON消息:判断参数:
  if msg.LParam=WM_RBUTTONDOWN then
  begin
    GetCursorPos( p );
    SetForegroundWindow( Handle );
    PopupMenu1.Popup( p.x, p.y );
  end
  else if msg.LParam=WM_LBUTTONDBLCLK then
    默认菜单项.Click;别的看API帮助吧。

解决方案 »

  1.   

    const
        WM_TrayMessage=WM_User+100;  protected
          procedure AppMinimized(Sender: TObject);
          procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;uses ShellApivar
      NID:TNotifyIconData{点击了任务栏的图标}
    procedure TMainForm.WMTrayMessage(var msg:TMessage);
    var
      p:TPoint;
    begin
      if msg.LParam=WM_LButtonDown then
      begin
        ShowWindow(Application.Handle,SW_Show);
        Application.Restore;
      end
      else if msg.LParam=WM_RButtonDown then
      begin
        GetCursorPos(p);
        pmTray.Popup(p.x,p.y);
      end;
    end;{应用程序最小化时图标显示在任务栏}
    procedure TMainForm.AppMinimized(Sender:TObject);
    begin
      NID.cbSize:=SizeOf(TNotifyIconData);
      NID.hIcon:=Application.Icon.Handle;
      NID.szTip:= '彩虹2.0 Beta ';
      NID.uCallbackMessage:=WM_TrayMessage;
      NID.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
      NID.uID:=0;
      NID.Wnd:=Handle;
      Shell_NotifyIcon(NIM_ADD,@NID);
      ShowWindow(Application.Handle,SW_Hide);
    end;procedure TMainForm.FormCreate(Sender: TObject);
    begin
      Application.OnMinimize:=AppMinimized;
      AppMinimized(nil);
    end;procedure TMainForm.FormDestroy(Sender: TObject);
    begin
      Shell_NotifyIcon(NIM_DELETE,@NID);
    end;
      

  2.   

    忘了一点,要将消息也放到结构参数中:
    IconData.uCallbackMessage := WM_USER_TRAYICON;