我的需求是这样的,我在form1中把WindowState=wsMaximized,并且在左边放了一些构件,剩下右边就空出一大块空间。
        现在问题来了,当我用菜单时,显示出form2,我点击一下form2的最大化按钮,结果它会覆盖整个form1。我现在的需求就是当我按下form2时,它能占满我在form1中空出来的空间就行了。
        各位有没有方法能实现啊。小弟给你敬礼了

解决方案 »

  1.   

    mdi
    或者
    你可以指定form1上面的某个容器为form2的parent
      

  2.   

    是这样啊,我试试。不过为什么,我一运行点一下最大化然后点还原,form1和form2的最大化和最小化都成一个了,本来form1和form2各有一个最大化最小化的
      

  3.   

    捕捉一下WM_GETMINMAXINFO消息
    重新定义FORM最大化的尺寸和位置var
     MinMaxInfo : ^TMinMaxInfo;
    begin
     if Message.Msg=WM_GETMINMAXINFO then 
     being
       MinMaxInfo:=Pointer(Message.LParam);
       MinMaxInfo.ptMinTrackSize:=Point(640,400); //最小尺寸640*400,自己变通吧
     end;
     inherited;
    end
      

  4.   

    如果mdi主窗体没有菜单,确实会出现楼主所述的情况。如果允许,请添加主菜单,这样当子窗体最大化时,他的系统菜单和系统按钮会合并到主窗体的菜单上去,这样就会出现两个系统才答案,即主窗体和子窗体分别有自己的系统菜单。
      

  5.   

    楼上的说的不错,可是我发现,我把form2定义为子窗体,运行时它自己会显示出来,而且,如果我事先在form1中加入panel构件(应该是这样拼的吧),form2就显示不出来。
             我也不能把form2的visible改为false,会提示错误。我现在所需要的功能,就是点击某个菜单项,就能把form2显示出来,现在form2的显示完全不受我控制。即便我在菜单项写代码:form2.show也没用。请各位指教
      

  6.   

    在FORM1的空白区域放一个PANEL,然后在FORM2的CREATE事件中:FORM2.PARENT:=FORM1.PANEL
      

  7.   

    看来楼主尚不理解delphi关于加载窗体以及MDI窗体的机制。一般情况下,delphi会自动创建所有窗体,这是其一。其二,delphi会把自动创建的MDI子窗体默认给显示出来。以上两点,促使你上面所述的问题。delphi自动创建了MDI自窗体,同时把它给显示出来了,就这么简单。另外,MDI自窗体是不能隐藏的,只能关闭,所以你设其为隐藏,势必会触发delphi内部的异常。
        如果解决呢?打开project/options菜单,选择forms页签,把子窗体从auto-create forms里移掉,这样就不会被自动创建了,当然也就不会被显示出来。
        当需要显示的时候再动态创建。MDI子窗体会自动显示的。MDI子窗体默认是不能关闭的(默认为最小化),要真正关闭,建议在OnClose里将Action设为caFree。
      

  8.   

    SubFrame1^ dg = gcnew SubFrame1();
     dg->MdiParent = this;
     dg->Show();