要求象BitComet那样的最小化及还原
点击窗体最小化按钮后整个窗体消失,缩小到托盘中,任务栏里也不能有,然后点一下托盘图标再还原为原来的样子
第一步最小化是不是要捕捉窗体的最小化事件,然后在事件里添加隐藏窗体的代码
第二步还原的时候该怎么还原?

解决方案 »

  1.   

    SetWindowPos(application.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_HIDEWINDOW);
      

  2.   

    WM_SYSCOMMAND  wParam=SC_MINIMIZE (or SC_ICON) WM_MIDASICON  LParam=WM_LBUTTONDBLCLK
      

  3.   

    先声明
      private
        { Private declarations }
        procedure SysCommand(var message: TMessage); message WM_SYSCOMMAND;...procedure TForm1.SysCommand(var message: TMessage);
    begin
      case message.WParam of
        SC_MINIMIZE:
        begin
          SetWindowPos(application.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_HIDEWINDOW);
          hide;
        end;
      else
        inherited;
      end;
    end;还原的时候
      Show;
      SetWindowPos(application.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW);
      

  4.   

    你再查查SetWindowLong的功能
      

  5.   

    http://www.delphifans.com/SoftView/SoftView_403.html
      

  6.   

    楼上几位能再说清楚一点吗,我对消息这块不是很明白,我后来依葫芦画瓢写了几行代码,不能实现,也不知错在哪能里,请帮忙看看
    在interface处:
    const
      WM_NID=WM_USER+1000; //用于托盘
      WM_MIN=WM_USER+1001; //用于窗体最小化procedure TForm11.WMMin(var msg:TMessage);
    begin
      case msg.WParam of
          SC_Minimize:begin//捕获窗体最小化消息
                          //第一步添加托盘图标
                          with NotifyIcon do
                          begin
                              cbSize:=Sizeof(TNotifyIconData);
                              Wnd:=Handle;
                              uID:=1;
                              uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
                              uCallBackMessage:=WM_NID;
                              hIcon:=Application.Icon.Handle;
                          end;//with
                          Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
                       //添加好后隐藏窗体,并且不在任务栏上显示
                       SetWindowPos(Application.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_HIDEWINDOW);
                       Hide;
                      end;                  
      end;//Caseend;procedure TForm1.WMNID(var msg:TMessage);
    begin
      Case msg.LParam of
          WM_LBUTTONDOWN:begin//对托盘图标按下了左键
                       //显示出窗体       
                       Show;
                       SetWindowPos(Application.Handle,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW);
                         end;
      end;//Case
    end;
    现在问题是当点击窗体最小化按钮时WMMin这个函数没有被触发,不知道正确的方法应该怎么做?
      

  7.   

    下面是函数声明:
    procedure WMNID(var msg:TMessage);message WM_NID;
    procedure WMMIN(var msg:TMessage);message WM_MIN;
      

  8.   

    应该这样声明:
    procedure SysCommand(var msg: TMessage); message WM_SYSCOMMAND;
      

  9.   

    由于WM_NID,WM_MIN是自定义消息
    Windows不能触发,需要自己触发
    SendMessage(Application.Handle,WM_NID,0,0);
      

  10.   

    hangguojun(布丁):
      我试了一下,将原先procedure WMMIN(var msg:TMessage);message WM_MIN;更改为
      procedure WMMIN(var msg:TMessage);message WM_SYSCOMMAND;是可以的,不过又出现新的问题
    点击最小化是达到我的要求了,不过当点击最大化或关闭按钮又什么反应都没有了,这该怎么处理呢?