我想用下面的程序实现动态打开以有的窗体
procedure TMainForm.openform(const Name: string);
var
  MyForm: TForm;
  ss:string ;
begin
  ss:='name';
  MyForm := (Application.FindComponent(ss) as TForm);
  Myform.show;
end;现在我想在此之上实现打开时是动态的创建
如 application.createform(TXXX,XXX);
   XXX.showmodal;

解决方案 »

  1.   

    try
        Screen.Cursor := crSQLWait;
        if not Assigned(MyForm) then
        begin
          MyForm := TMyForm.Create(Application);
        end;
        if not MyForm.Active then
          MyForm.Show;
        MyForm.WindowState := wsMaximized;
      finally
        Screen.Cursor := crDefault;
      end;//动态创建窗体
    procedure TMainForm.ShowForm(TMyForm : TFormClass;MyForm : TForm );
    begin
      if not Assigned(MyForm) then
      begin
        MyForm := TMyForm.Create(Application);
      end;
      try
        MyForm.ShowModal;
      finally
        FreeAndNil(MyForm);
      end;
    end;
      

  2.   

    如果连TMyForm 都没有,那么要先注册
      

  3.   

    具体情况是这样的,我做了一个MDI主窗体加了一个toolbar(其中有添加 、修改 、删除)我想实现一点添加就能打开当前子窗体的添加 (这个是做好的, 每一个子窗体都做好了)我能用procedure TMainForm.openform(const Name: string);
    var
      MyForm: TForm;
      ss:string ;
    begin
      ss:='name';
      MyForm := (Application.FindComponent(ss) as TForm);
      Myform.show;
    end;  实现但又感觉这样影响速度
    能不能改成application.createform 这种 ,即把做好的窗体改为可用窗体呀?(就是动态创建)
      

  4.   

    hehe 那就是很难实现了? 那怎么办
    结贴?