就像 Flashget 一样。
当然菜单中有一个“退出”项,只有通过这里才能关闭程序。
小弟愚昧,给的代码最好能完全些。谢谢!

解决方案 »

  1.   

    //本过程在这里只隐藏界面功能
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      nid: TNotifyIconData;
    begin
      nid.cbSize := sizeof(nid); // nid变量的字节数
      nid.cbSize := sizeof(nid); // nid变量的字节数
      nid.uID := 0; //内部标识,与加入小图标时的数一致
      nid.Wnd := Handle; //主窗口句柄
      Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
      Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
    end;//本过程在这里只隐藏界面功能
    procedure TForm1.FormActivate(Sender: TObject);
    var
      nid: TNotifyIconData;
    begin
      nid.cbSize := sizeof(nid); // nid变量的字节数
      nid.Wnd := Handle; // 主窗口句柄
      nid.uID := 0;     // 内部标识,可设为任意数
      nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?
      nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?  nid.szTip := '程序V1.2'; // 提示字符串
      nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息
      nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有?  if not Shell_NotifyIcon(NIM_ADD, @nid) then
        begin
          ShowMessage('Failed!');
          Application.Terminate;
        end;
      {将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
      //SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;procedure TForm1.OnIconNotify(var Message: TMessage);
    Var
      Busy:Boolean;
    begin
      Busy:= false;
      if not Busy then
        begin
          Busy:= true;
          if Message.LParam=WM_LBUTTONDOWN then
            //恢复
            show;
          Busy := false;
        end;
    end;
      

  2.   

    获取系统相关消息
    声明过程
    Procedure WMSysCommand(Var msg : TMessage);Message WM_SYSCOMMAND ;
    过程实例
    procedure TFormMain.WMSysCommand(var msg: TMessage);
    begin
      case Msg.WParam of
        SC_MINIMIZE: begin //最小化
                     end;
        SC_CLOSE    :begin
                         FormMain.Hide ;
                       Application.MainForm.Visible:=false;
                     end;
      end;
      Inherited;
    end;
      

  3.   

    一个实现系统托盘图表的源码的例子 :
    http://www.8860.net/delphicode/dispdoc.asp?id=64
      

  4.   

    谢谢各位。但出了点问题,这是我的代码://在状态区添加图标function TServMainForm.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.uCallbackMessage := WM_YXSFNOTIFY;
      nid.hIcon := LoadIcon(hInstance, 'MAINICON');
      strCopy(nid.szTip, strNotifyTip);
      AddIcon := Shell_NotifyIcon(NIM_ADD, @nid);
    end;//从状态区移去图标function TServMainForm.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 TServMainForm.WMSysCommand(var msg: TMessage);
    begin
    if Msg.WParam = SC_CLOSE then
    begin
        ServMainForm.Hide ;
        Application.MainForm.Visible:=false;
        AddIcon(handle);
        ShowWindow(Application.handle, sw_hide)
    end
    else
    Inherited;从托盘区恢复窗口时,我使用了:procedure TServMainForm.FormRestorClick(Sender: TObject);
    begin
      RemoveIcon(handle);
      ShowWindow(Application.handle, SW_SHOWNORMAL);
    end;但结果却是只到了任务栏,窗口并没有恢复。这是为何?
      

  5.   

    想显示窗体时 写下如下代码就行     时间有限不作解释有不明白的可以发消息给我
    ShowWindow(Handle,  SW_SHOW);
    ShowWindow(Application.handle,  SW_SHOW);SetWindowLong(Application.Handle,  GWL_EXSTYLE,not  (GetWindowLong(Application.handle,  GWL_EXSTYLE)or  WS_EX_TOOLWINDOW  AND  NOT  WS_EX_APPWINDOW));
     SetForegroundWindow(Application.Handle);
      

  6.   

    procedure TForm1.WMSysCommand(var msg: TMessage);
    begin
     if (msg.WParam=SC_CLOSE) then
      begin
         application.minimize;
         MainForm.Visible:=false;
      end
      else
        Inherited;
    end;
      

  7.   

    To duxin(小伍)这个方法可行,但仅限于第一次。和我以上的代码结合到一起时,在第二倒第三词最小化和恢复时,不能正常最小化。主界面不能隐藏。
      

  8.   

    //把窗体隐藏,再隐藏任务栏:
        Form_main.Visible:=false;
        ShowWindow(handle,SW_HIDE);//隐藏工具栏  
    //装载托盘图标:
       myicon:=ticon.Create;
       myicon.LoadFromFile('File\ico.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:=myicon.Handle;
       icondata.szTip:='福思特软件-客户管理系统';
       Shell_NotifyIcon(NIM_ADD,@icondata);
      

  9.   

    补充一点var  icondata:TNotifyIcondata;