我想实现这样的界面:主窗体
最上方是菜单,下面是工具栏,最左边是OutLook工具栏
右下方的大区域,显示子窗体(子窗体根据需要在此区域切换)!请注意,系统不是MDI框架,而是SDI框架!有没专门来完成此功能的控件,
请不要告诉我用  Form2.Parent:=Panel1;
这样的Form2可操作性极差!

解决方案 »

  1.   

    "文件“----”新建“-----”frame"
    frame就是一个窗体(满足你的要求)
    然后在主窗体上放一个frames(standard工具栏第一个)
      

  2.   

    在右边用Page页。 
    创建新窗体,融合到主窗体中。
      

  3.   

    在右边用Page页。 
    创建新窗体,融合到主窗体中。
    此种方法能不能再说清楚点?如果用FRAME代替窗体的话,很多事件没了,释放资源不方便,我需要在此容器中放几百种窗体
    有哪位大侠有更好的方法,用第三方控件也行?
      

  4.   

    动态创建窗体:在右边区域内加一个Panel,设置它的Align为alClient,
    在你的主窗体中写以下代码:
    //写在需要创建窗体事件中
    If Not(Assigned(Frm2)) then
      Frm2:= TFrm2.Create(Application); 
    LoadChildForm(Panel1,Frm2);//
    function LoadChildForm(aParent: TWincontrol; aChild: TForm): Boolean;
    begin
      If aChild.Parent=aParent then
      begin
        Result := True;
        Exit;
      End;
      With aChild do
      begin
        Parent      := aParent;
        align       := alClient;
        Position    := poDefault;
        BorderStyle := bsNone;
        BorderIcons := [];
      end;
      aChild.Show;
      Result := True;
    end;
      

  5.   

    我觉得上面If Not(Assigned(Frm2)) then
      Frm2:= TFrm2.Create(Application); 
    虽然能控制一个窗体只能创建一次,但不能控制及时释放资源,
    比如aParent已有其它窗体,当我在此显示其它的窗体之前,就要将此处的已显示的窗体释放掉,
    如果不这样随着操作的增多,内存中会出现几百个窗体(因为工程中有300多个窗体);
    此时会浪费很多的资源用Show来显示窗体,资源释放不是很方便,如果用在Close事件中Action:=CaFree;
    如果之前发生异常,会出现资源漏洞,用ShowModal显示,此时的窗体,很难在操作;我发现用Frame界面还不错,但是它的事件太少了!