procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
  i: integer;
  Child:TForm;
begin
  for i := 0 to Screen.FormCount -1 do
      if Screen.Forms[i].ClassType=FormClass then
      begin
        Child:=Screen.Forms[i];
        if Child.WindowState=wsMinimized then
           ShowWindow(Child.handle,SW_SHOWNORMAL)
        else
           ShowWindow(Child.handle,SW_SHOWNA);
        if (not Child.Visible) then Child.Visible:=True;
        Child.BringToFront;
        Child.Setfocus;
        TForm(fm):=Child;
        exit;
      end;
  Child:=TForm(FormClass.NewInstance);
  TForm(fm):=Child;
  Child.Create(AOwner);
end;
这是创建(加载)MDI子窗体的公用函数。使用方法
  OpenForm(TForm2,Form2,self);//我上面的过程

解决方案 »

  1.   

    to renzhm(戴尔飞) 我要求的是ShowModal方式,你的这个不能实现这个功能啊
      

  2.   

    to 楼主:  MDI窗体调用不能用showmodal方法!
      

  3.   

    其实楼主你可以变通的!
    再开一个MID子窗体的时候将另一个关闭!
    不就可以SHOWMODAL了吗?
    在关闭当前MID子窗体的时候再打开另一个!
    我实现过!
    有问题可以再说!
    但囊中羞涩买不起邮票了!
    哈哈哈
      

  4.   

    sorry!没看清ChildForm2.FormStyle := fsNormal;
    -----------
    确实抖动!
      

  5.   

    ChildForm2的FormStyle属性是不能修改的,因为他是MDI子窗体,所以必须是开始设置的fsMDIChild.试试下面的代码:
     ChildForm2:= TChildForm2.Create(Application);
        //ChildForm2.caption:=....;
        ChildForm2.Position := poScreenCenter;
        ChildForm2.show;//或者ChildForm2.visible:=true;
      

  6.   

    to adventurezl(阿林) :ChildForm2的FormStyle属性是可以修改的,因为楼主想使用showmodal方法打开这个窗体,才会修改它为:fsNormal
      

  7.   

    我只知道MDI的子窗体不能用SHOWMODAL的方法显示