一是关闭时隐藏,任务栏也要隐藏
二是点拖盘图标时显示主窗体,任务栏也要显示。请分别给出代码 谢谢

解决方案 »

  1.   


    {Demo:关闭主窗体时隐藏主窗体和任务栏按钮,托盘显示图标;
           右击托盘图标时主窗体和任务栏按钮重新显示,托盘图标消失;
           左击托盘图标时退出程序
    }unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;const
      WM_IconMessage = WM_User + 1000;type
      TForm1 = class(TForm)
        procedure OnIconNotify(var Msg: TMessage); message WM_IconMessage;
        procedure FormShow(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses ShellAPI;
    {$R *.dfm}var
      Ntf: TNotifyIconData;procedure TForm1.OnIconNotify(var Msg: TMessage);
    begin
      if Msg.LParam = WM_RButtonDown then Show;
      if Msg.LParam = WM_LButtonDown then Application.Terminate;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      Shell_NotifyIcon(NIM_DELETE, @Ntf);
      ShowWindow(Application.Handle, SW_Show);
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      with Ntf do begin
        cbSize := SizeOf(Ntf);
        Wnd := Self.Handle;
        uID := 1;
        uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
        uCallbackMessage := WM_IconMessage;
        hIcon := Application.Icon.Handle;
        szTip := 'Mouse Down Here!';
      end;
      ShellApi.Shell_NotifyIcon(NIM_ADD, @Ntf);
      Self.Hide;
      ShowWindow(Application.Handle, SW_Hide);
      CanClose := False;
    end;end.
      

  2.   

    参考如下代码
    unit MainFrm;interfaceuses
       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       Dialogs, StdCtrls, ExtCtrls, ComCtrls, ScktComp, ImgList, IniFiles, ShellApi,
       Menus, DateUtils;const
       ICON_ID = 1;
       MI_ICONEVENT = WM_USER + 1;type
       TfrmMain = class(TForm)
          Bevel: TBevel;
          pmMain: TPopupMenu;
          miAbout: TMenuItem;
          N1: TMenuItem;
          miExit: TMenuItem;
          procedure FormCreate(Sender: TObject);
          procedure FormDestroy(Sender: TObject);
          procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
          procedure btnCloseClick(Sender: TObject);
          procedure miExitClick(Sender: TObject);
          procedure miAboutClick(Sender: TObject);
       private
          FIconData: TNotifyIcondata;
        { Private declarations }
          procedure SetupIcon;
          procedure IconOnClick(var Msg: TMessage); message MI_ICONEVENT;
          procedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand;
       public
        { Public declarations }
       end;var
       frmMain: TfrmMain;
       HwndMutex: THandle;implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);
    begin
       SetupIcon;
    end;procedure TfrmMain.FormDestroy(Sender: TObject);
    begin
       Shell_NotifyIcon(NIM_Delete, @FIconData);
    end;procedure TfrmMain.IconOnClick(var Msg: TMessage);
    var
       P: TPoint;
    begin
       case Msg.LParam of
          WM_LBUTTONDOWN:
             begin
                FrmMain.Show;
                FrmMain.WindowState := wsNormal;
                SetForegroundWindow(FrmMain.Handle);
             end;
          WM_RBUTTONDOWN:
             begin
                GetCursorPos(P);
                pmMain.Popup(P.X, P.Y);
             end;
       end;
    end;procedure TfrmMain.WMSysCommand(var msg: TWMSysCommand);
    begin
       if Msg.CmdType and $FFF0 = SC_Close then
       begin //将窗体最小化并隐藏
          WindowState := wsMinimized;
          Hide;
       end
       else if msg.CmdType and $FFF0 = SC_MINIMIZE then
       begin
          WindowState := wsMinimized;
          Hide;
       end
       else inherited;
    end;procedure TfrmMain.SetupIcon;
    begin
       with FIconData do
       begin
          FIconData.cbSize := SizeOf(FIconData);
          FIconData.Wnd := Handle;
          FIconData.uID := Icon_ID;
          FIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
          FIconData.uCallbackMessage := MI_ICONEVENT;
          FIconData.hIcon := Application.Icon.Handle;
          FIconData.szTip := 'TrayIcon V1.0';
       end;
       Shell_NotifyIcon(NIM_ADD, @FIconData);
    end;procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
       CanClose := MessageBox(Handle, '确定要退出程序?', '提示', MB_YESNO or MB_ICONQUESTION) = mrYES;
    end;procedure TfrmMain.btnCloseClick(Sender: TObject);
    begin
       WindowState := wsMinimized;
       Hide;
    end;procedure TfrmMain.miExitClick(Sender: TObject);
    begin
       Close;
    end;procedure TfrmMain.miAboutClick(Sender: TObject);
    begin
       ShellAbout(Handle, PChar(Application.Title), 'TrayIcon Demo', Application.Icon.Handle);
    end;end.测试可以达到你的要求
      

  3.   

    用CoolTrayIcon组件,太方便了,呵呵,而且D2007中也自带了类似组件.
      

  4.   

    谢谢各位 我解决了 是程序本身的一个BUG导致了之前没有实现,现在好了,结贴。另外我用的就是CoolTrayIcon,谢谢lihuasoft朋友捐的分。