昨天看到这样一个软件主界面,很想模仿,可是怎么都不成功,程序是MDI程序,请高手帮帮忙这个界面是这样的,它的菜单和状态栏在摆放上都向右移动了一段距离,左边空出的地方放了一个TPanel的控件,上面画了一些软件的标示,就像开始菜单上的Window2000 那样.现在的难点在这里,如果象如下这样摆
Panel1.Align:=alLeft;
Panel2.Align:=alClient;
然后在Panel2上放一个Panel3
Panel3.Align:=clBottom,然后把状态栏放在Panel3中
虽然可以实现界面,但是由于主窗体右上部分显示子窗体的地方被Panel2占用,子窗体无法显示。
如果象如下这样摆
Panel1.Align:=alLeft;
Panel2.Align:=alBottom;
然后在Panel2上放一个Panel3,一个Panel4
Panel3.Align:=clLeft,Panel4.Align:=clClient然后把状态栏放在Panel4中
这样摆放虽然可以让子窗体显示了,但是左面出现了两个Panel,一个Panel1,一个Panel3,这样就显得不连惯了,而原界面的左面可是一个凸起的完整的Panel

解决方案 »

  1.   

    如果想在窗体上做文章的话,你可选择一个好的控件呀!到源码空间[http://www.playicq.com]
      

  2.   

    Panel1.Align := alLeft;
    StatusBar.Align := alCustom;
    重载MainForm的CustomAlignPosition方法:
      protected
        procedure CustomAlignPosition(Control: TControl; var NewLeft, NewTop, NewWidth,
          NewHeight: Integer; var AlignRect: TRect; AlignInfo: TAlignInfo); override;...procedure TMainForm.CustomAlignPosition(Control: TControl; var NewLeft, NewTop, NewWidth,
          NewHeight: Integer; var AlignRect: TRect; AlignInfo: TAlignInfo);
    begin
      if Control = StatusBar then begin
        NewLeft := Panel1.Width;
        NewTop := MainForm.ClientHeight-StatusBar.Height;
        NewWidth := MainForm.ClientWidth-Panel1.Width;
      end;
    end;