不好意识写错了。应该popup menu

解决方案 »

  1.   

    在自带的例子中查找
    TrayIcon
      

  2.   

    建立窗体Form1,在Form1中放置一个tPoputMenu组件,设置Form1的BorderStyle为bsNone
    这里要用到windows API函数Shell_NotifyIcon,所以在uses中添加shellapi单元unit unit1;
    ...
    uses
      windoww,messags,....,shellapi;
    const
      ICON_ID=1;
      MI_ICONEVENT = WM_USER + 1;
    type
      TForm1 = class(TForm)
    .....
      private
      Icon : TIcon;
      Procedure InstallIcon;
      Procedure IconOnClick(Var Message : TMessage );message MI_ICONEVENT;
      public
    ....procedure TForm1.InstallIcon;
    var
      IconData : TNotifyIconData;
    begin
      Icon := TIcon.Create;
      Icon.LoadFromFile('icon.ico');
      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 := Icon.Handle;
      IconData.szTip := 'one icon example';
      Shell_NotifyIcon(NIM_ADD,@IconData);
    end;procedure TForm1.IconOnClick(var message : TMessage);
    var
      p : TPoint;
    begin
      if (message.IParam = WM_RBUTTONDOWN) then //如果按下的是右键
      begin
        GetCursorPos(p);
        PopupMenu1.Poput(p.x,p.y);
      end;
    end; procedure TForm1.FormCreate(Sender : TObject);
    begin
      Status := True;
      InstallIcon;
      showWindow(Application,handle,SW_HIDE);
      setWindowLong(Appliction,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    end;procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
    var 
      Icondata : TNOtifyIConData;
    begin
      Icondata.cbSize := SizeOf(Icondata);
      Icondata.Wnd := Handle;
      IconData.uID := ICON_ID;
      Shell_NOtifyIcon(NIM_DELETE,@IconData);
      Icon.Free;
    end;PopupMenu1的时间就跟一般的一样还有Shell_NotifyIcon是用来向状态指示区发消息的,它的函数原型是
    function Shell_NotifyIcon(dwMessage : DWORD;LpData ; PNotifyIconData):Bool;stdcall;
    其中LpData是指向TNotifyIconData结构的指针,此结构是要增加的图标的信息
    PNotifyIconData =^TNotifyIconData
    TNotifyIconData = record
        cbSize : DWORD;
        Wnd : HWND;
        uID : UINT;
        uFlags : UINT;
        uCallbackMessage : UINT;
        hIcon : HICON;
        szTip : array [0..63] of AnsiChar;
    end;  
      

  3.   

    popup menu是出来了,可你点其他地方的时候他不消失,一直显示,除非你选其中的一项。
    这可叫我如何是好。
     
      

  4.   

    这个问题也是我所碰到并无法解决的,请大家一并看一下这个帖子吧:
    http://www.csdn.net/expert/TopicView.asp?id=248953TO:bb_star_bb(爱编程的菜鸟),如果不是点击窗体呢?比如说点击了桌面空白处或者别的程序的界面,那怎么办?你的方法不就不行了?!我不想使用控件,我想自己编写代码,主要是想了解一下原理!
      

  5.   

    我搜了一把,确实找到了一些帖子。
    http://www.csdn.net/expert/Topic/132/132764.shtm
    大家有兴趣去看看吧!
      

  6.   

    我已经解决了,xuejinlong(垃圾) 你解决了吗?
    可参考http://www.csdn.net/expert/Topic/132/132764.shtm
    http://www.csdn.net/expert/TopicView.asp?id=248953