图标成功载入状态区,可是无论是双击还是单击图标,程序都没有执行相应的操作,不知道是为什么,代码如下,请各位帮忙看看:
const
  CM_RESTORE=WM_USER+$1000;    //自定义”恢复“消息
  GDJT_APP_NAME='GDJT_Sysytem';
const
  ID_MAIN=100;
  WM_GDJTNOTIFY=WM_USER+100;
  strNotifyTip='轨道交通资料管理服务器';//状态区的提示消息
          //定义的图标ID;//恢复消息
procedure TServerForm.RestoreRequest(var message:TMessage);
begin
  if IsIconic(Application.Handle)=true then
    Application.Restore      //恢复窗体
  else
    Application.BringToFront;
end;//在状态区添加图标
function TServerForm.AddIcon(hwnd:HWND):boolean;
begin
  nid.cbSize:=sizeof(NOTIFYICONDATA);
  nid.Wnd:=hwnd;
  nid.uID:=ID_MAIN;
  nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;   //这里已经重新设置了有效参数了
  nid.hIcon:=LoadICON(hInstance,'MAINICON');
  strCopy(nid.szTip,strNotifyTip);
  AddIcon:=Shell_NotifyIcon(NIM_ADD,@nid);
end;//从状态区移去图标
function TServerForm.RemoveIcon(hwnd:HWND):boolean;
var
  nid:NOTIFYICONDATA;
begin
  nid.cbSize:=Sizeof(NOTIFYICONDATA);
  nid.Wnd:=hwnd;
  nid.uID:=ID_MAIN;
  nid.uFlags:=0;
  RemoveICON:=Shell_NotifyIcon(NIM_DELETE,@nid);
end;//自定义消息处理函数-无论怎么点击,程序就是没有反应
procedure TServerForm.Notify(var msg:TMessage);
var
  pt:TPoint;
begin
    case msg.LParam of
      WM_RBUTTONDOWN:    //当点击右键时,弹出快捷菜单
        begin
          SetForeGroundWindow(nid.wnd);
          GetCursorPos(Pt);
          Popupmenu.Popup(pt.x, pt.y);
        end;
      WM_LBUTTONDOWN:      //左键按下,窗体置前
        Application.MainForm.BringToFront;
      WM_LBUTTONDBLCLK:    //左键双击时
        SetForegroundWindow(Application.Handle);
    end;
end;

解决方案 »

  1.   

    给楼主贴一段代码看看:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ShellAPI, ImgList, Menus;const WM_NOTIFY = WM_USER + 101;      // TRAY消息
          WM_TOOLTRAYICON = WM_USER+1;
    type
      TfrmMain = class(TForm)
        imlToolbar: TImageList;
        PopupMenu1: TPopupMenu;
        N1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure N1Click(Sender: TObject);
      private
        { Private declarations }
            procedure OnAppMinimize(Sender: TObject); // 应用程序最小化响应函数
            procedure  OnNotify(var Msg : TMessage); message WM_NOTIFY;
            procedure ToolMSG(var Msg: TWMSYSCOMMAND); Message WM_TOOLTRAYICON;
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;
      NotifyIcon : TNotifyIconData;implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);
    var
       Icon : TIcon;
    begin        //
            //NotifyIcon为全局变量,在程序的开头已经定义了
            //
            with NotifyIcon do
            begin
                    cbSize:=SizeOf(TNotifyIconData);
                    Wnd:=Handle;   //指向当前窗体frmMain的句柄
                    uID:=1;
                    uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
                    uCallBackMessage:=WM_NOTIFY;
                    hIcon:=Application.Icon.Handle;
                    icon := TIcon.Create();
                    frmmain.imlToolbar.GetIcon(0, icon);
                    hIcon := icon.Handle;
                    szTip:='短信程序';
            end;
                    Application.OnMinimize := OnAppMinimize;
    end;//
    // 应用程序最小化时调用此函数
    //
    procedure TfrmMain.OnAppMinimize(Sender: TObject);
    begin
    //        if Config.m_Config.m_Hide then
     //       begin
                    frmMain.Visible := False;
                    //
                    // 把设置好的变量NotifyIcon加入到系统中以便处理
                    //
                   Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
     //       end;
    end;//
    // 托盘图标响应事件
    //
    procedure TfrmMain.OnNotify(var Msg: TMessage);
    var
            pos : TPoint;
    begin
            case Msg.LParam of
                    WM_LBUTTONDBLCLK:   // 双击事件
                    begin
                            frmMain.Visible := True ;
                            Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
                            Application.Restore();
                            SetForegroundWindow(frmMain.Handle);
                    end;
                    WM_RBUTTONUP:       // 右键点击
                    begin
                            GetCursorPos(pos);
                            frmMain.PopupMenu1.Popup(pos.X, pos.Y);
                    end;
            End;
    end;procedure TfrmMain.N1Click(Sender: TObject);
    begin
    close;
    end;procedure TfrmMain.ToolMSG(var Msg: TWMSYSCOMMAND);
    begin
         if (Msg.Msg = WM_TOOLTRAYICON) and
            (Msg.Key = WM_LBUTTONDBLCLK) then
             showwindow(application.handle,sw_show);
    end;end. 
      

  2.   

    谢谢,搞定了,是因为没有对uCallbackMessage赋值,所以才对鼠标的消息没有反应,你的程序的这句话起了作用了
    uCallBackMessage:=WM_NOTIFY;