在MDI窗体中,我想控制每个子窗体在弹出后出现在客户区的左上角;对于子窗体的个数也有一定的限制,如果达到某个标准,则在打开新的子窗体时,就要关闭已经存在的某个子窗体,维持子窗体在一定的数量范围之内。请问如何控制!
  能否给一些代码?谢谢!

解决方案 »

  1.   

    1. 在子窗体创建时:OnCreate中写
       top:=0;
       left:=0;2. MDI主窗体的MdiChildCount就是目前的子窗体数:即MainForm.MdiChildCount
       利用它就可以实现你的要求
      

  2.   

    to oracle_lover
     好象不行
      

  3.   

    我把太理解,是这个意思吗?var
      Form1: TForm1;
    const
      MAXWNDNUM = 3;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      if form1.MDIChildCount < MAXWNDNUM then
      begin
        Form2 := TForm2.Create(Application);
        Form2.Left := 0;
        Form2.Top := 0;
        Form2.Show;
      end
      else
      begin
        Form2.Free;
        Form2 := TForm2.Create(Application);
        Form2.Left := 0;
        Form2.Top := 0;
        Form2.Show;
      end;
    end;
      

  4.   

    //差不多是killlaoli(菜鸟)的意思
    //如果你的子窗体都是用同一个类TForm2创建的,MDI主窗体是Form1,则如下
    var
      Form1: TForm1;
    const
      MAXWNDNUM = 3; //子窗体最大数目implementationuses Unit2; //引用包含子窗体类TForm2定义的单元{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
     form2:TForm2; //定义变量
    begin
      if form1.MDIChildCount < MAXWNDNUM then
      begin
        Form2:= TForm2.Create(Application);
        Form2.Left := 0;
        Form2.Top := 0;
        Form2.Show;
      end
      else
      begin
        //Form2.Free; //这一句有问题,Form2还没创建,怎么释放?
        //释放最早创建的子窗体,用Form1.MDIChildren[Form1.MDIChildCount-1].free;
        //释放最晚创建的子窗体,用Form1.MDIChildren[0].free;
        //释放当前活动子窗体,用Form1.ActiveChild.free;
        //或者找到符合特定条件的子窗体,并释放
        Form2 := TForm2.Create(Application);
        Form2.Left := 0;
        Form2.Top := 0;
        Form2.Show;
      end;
    end;
      

  5.   

    to oracle_lover(数据库情人) 
    呵呵,学习!