如何才能让主窗体最小化时,子窗体不最小化,还能正常显示,请高手指教

解决方案 »

  1.   

    private
        { Private declarations }
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      public//...
    procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
      with Message do
      begin
        if CmdType and $FFF0 = SC_MINIMIZE then
          ShowWindow(Handle, SW_MINIMIZE)
        else inherited;
      end;
    end;
      

  2.   

    TForm1是表示子窗口吧?ShowWindow(Handle, SW_MINIMIZE)是不是应该改成ShowWindow(Handle, SW_SHOWNORMAL)啊?反正我是没有试过的。
      

  3.   

    首先楼主要明白Delphi当中Application的机制.首先Application会截掉部分主窗体的信息,而此时如果发送到主窗体一个最小化的消息,则Application会进行处理,而并不是主窗体自己处理,所以当你把主窗体的消息拦截掉不传递给Application的话,它就不知道这个消息,此时你直接把主窗体最小化就不会影响到其它窗体.
      

  4.   

    这样可以,我试过http://community.csdn.net/Expert/topic/4896/4896453.xml?temp=.6527979
      

  5.   

    重载Createparams,改变窗体风格,设置父句柄为桌面,代码大概如下:private 
       procedure Createparams(var params: TCreateParams);override;
    procedure TForm1.Createparams(var params: TCreateParams);
    begin
      inherited CreateParams(Params);
      with params do
      begin
        Style:=WS_POPUP;
        ExStyle :=  WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_NOACTIVATE or WS_EX_WINDOWEDGE;
        WndParent := GetWindow(FindWindow('Progman', nil), GW_CHILD);
      end;
    end;
      

  6.   

    >>如何才能让主窗体最小化时,子窗体不最小化,还能正常显示,请高手指教如果是MDI的情况下,MainForm都最小化了,ChildForm,自然也跟着最小化了ChildForm不就是显示在MainForm的客户区吗?
      

  7.   

    在MDI中不大可能做到。一般情况下你应该是另外的一个单独的窗口,而不是子窗口。