procedure TNormalFun.ShowForm(FormName: String; TabPage: TPageControl);
//FormName是我的窗体名字
var
  ObjCom: TComponent;
  Fromstr: String;
begin
  Fromstr := FormName;
  ObjCom := Application.FindComponent(Fromstr);
  if TForm(ObjCom) <> nil then
  begin
    try
      if not assigned((ObjCom as TForm)) then
      begin
        try
          //怎么在这里创建一下窗体就是,用application.create()命令来创建
          //例如:
          // Form2:= TForm2.Create(Self);
          // Form2.Show;
          // Form2.ManualDock(PageControl1);
          //怎么实现Form2:= TForm2.Create(Self);这句怎么实现。
          (ObjCom as TForm).Show;
          (ObjCom as TForm).ManualDock(TabPage);
        finally
        end;
      end;
   end;
end;

解决方案 »

  1.   

    application.CreateForm(TObjCom, ObjCom);
    不过要先注册:RegisterClass(TObjCom);
      

  2.   

    郁闷,能不能把整个单元代码都贴出来呀~~我也是初学Delphi,对这个问题也很感兴趣,可光看这一个过程看不太明白
      

  3.   

    application.create(Tyourform,yourform)
     show or showmodal;
      

  4.   

    if Not Assigned(Object) then
      Object := TObject.Create(Self);
      Object.xxx;
      

  5.   

    procedure TNormalFun.ShowForm(FormName: String; TabPage: TPageControl);
    //FormName是我的窗体名字------------
    注意FormName只是一个String,application.CreateForm(TObjCom, ObjCom)中,TObjCom, ObjCom能是String类型吗?这才是楼主要问的问题.也就是说只给你一个字符串"FormA",如何在程序中创建TFormA的一个实例出来.(当然已引用FormA单元)。
    关注……
      

  6.   

    Delphi中有这个函数,搂主自己查一下帮助。
    GetClass(ClassName: String)
    调用这个之前,你的FormClass必须是注册了的(RegisterClass)。
      

  7.   

    xthmpro_cn(安徽农民*在外打工) ,您好,这个方法我已经试过了,也实现了,就是有两个问题感觉不是很爽,第一:因为的窗体很多,所以每次都要手工的RegisterClass,麻烦,第二:如果这样的话,我的数据库里面要保存的是类名,那样我以后想用别的开发用具去开发移植肯定不方便,所以最好是只传递窗体名字,那样的话灵活性大些。
      

  8.   

    我在(ObjCom as TForm).Show;
    前面加了一句
    Application.CreateForm(TComponentClass(ObjCom.ClassType),ObjCom);