系最小化后,怎么让它显示在系统的托盘里?请教!

解决方案 »

  1.   

    托盘可使用TrayIcon控件
    procedure wmsyscommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;procedure TForm1.wmsyscommand(var Msg: TWMSysCommand);
    begin
      if Msg.CmdType = SC_MINIMIZE then
         ShowMessage('最小化');
      inherited;
    end;
      

  2.   

    Shell_NotifyIcon(NIM_ADD, @ndApp);
      

  3.   

    icnApp:=TICON.create;
      icnApp.LoadFromFile(ExtractFilePath(Application.ExeName)+'hualong.ico');
      ndApp.cbSize := sizeof(NotifyIconData);
      ndApp.Wnd := handle;
      ndApp.uID := 0;
      ndApp.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
      ndApp.uCallbackMessage := WM_TRAYNOTIFY;
      ndApp.hIcon := icnApp.Handle;
      StrPLCopy(ndApp.szTip,'湖州短信专线通讯', 63);  //在任务栏状态区添加图标
      Shell_NotifyIcon(NIM_ADD, @ndApp);
    然后最小化的时候hide就可以了
    这样在托盘区就是有图标的了。
      

  4.   

    或者用API ,不过麻烦点。
    是用CB做的。希望可以对你有用:private: // User declarations
            void __fastcall AddTrayIcon();
            void __fastcall DeleteTrayIcon();        void __fastcall MyNotify(TMessage&Msg);
            BEGIN_MESSAGE_MAP
            MESSAGE_HANDLER(WM_MYNOTIFY,TMessage,MyNotify)
            END_MESSAGE_MAP(TForm);
      
          
    在.cpp里:
    void __fastcall TForm1::AddTrayIcon()
    {
      NOTIFYICONDATA tnd;
      PSTR pszTip="托盘图标范例";
      lstrcpyn(tnd.szTip,pszTip,sizeof(tnd.szTip));
      tnd.cbSize           =sizeof(NOTIFYICONDATA);
      tnd.hWnd             =Handle;
      tnd.uID              =ID_MYICON;
      tnd.uFlags           =NIF_MESSAGE|NIF_ICON|NIF_TIP;
      tnd.uCallbackMessage =WM_MYNOTIFY;
      tnd.hIcon            =Application->Icon->Handle;
      Shell_NotifyIcon(NIM_ADD,&tnd);}void __fastcall TForm1::DeleteTrayIcon()
    {
      NOTIFYICONDATA tnd;
      tnd.cbSize           =sizeof(NOTIFYICONDATA);
      tnd.hWnd             =Handle;
      tnd.uID              =ID_MYICON;
      tnd.uFlags           =NIF_MESSAGE|NIF_ICON|NIF_TIP;
      tnd.uCallbackMessage =WM_MYNOTIFY;
      tnd.hIcon            =Application->Icon->Handle;
      Shell_NotifyIcon(NIM_DELETE,&tnd);}void __fastcall TForm1::MyNotify(TMessage& Msg)
    {
      POINT MousePos;
      switch(Msg.LParam)
       {
         case WM_RBUTTONUP:
          GetCursorPos(&MousePos);
          PopupMenu1->PopupComponent=Form1;
          SetForegroundWindow(Handle);
          PopupMenu1->Popup(MousePos.x,MousePos.y);
          break;
         case WM_LBUTTONUP:
          Show();
          break;
         default :
          break;
       }
       TForm1::Dispatch(&Msg);
    }
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
    if(CheckBox1->Checked)
     {
       AddTrayIcon();
     }
     else
      {
       DeleteTrayIcon();
      }
      Button1->Enabled=CheckBox1->Checked;
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Hide();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N1Click(TObject *Sender)
    {
    Show();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N2Click(TObject *Sender)
    {
    Close();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
    DeleteTrayIcon();
    }
      

  5.   

    TrayIcon这个控件怎么在安装时出错?win2k