procedure TForm1.CreateForm(FormClass: TFormClass; var Form);
begin
  if not Assigned(Form) then  //[Error] Unit1.pas(37): Incompatible types
    Application.CreateForm(Formclass, Form);
  Form.ShowModal; //[Error] Unit1.pas(39): Record, object or class type required
end;我的程序中包含许多窗口,当我需要建立某个窗口时,通过Form1中的一个通用的过程来建立这个窗口。但上面的过程中有错误,应该如何修改这个过程?
非常感谢!!!

解决方案 »

  1.   

    不用Application.CreateForm(Formclass, Form);
    改为
    var myform;
    begin
     myform:=formclass.create(self);
     myform.showmodal;
    end;
    应该可以了
      

  2.   

    if not Assigned(Form1) then
       Form1:=TForm1.Create(Application);
    Form1.ShowModal;
      

  3.   

    procedure TForm1.CreateForm(FormClass: TFormClass; var Form);
    begin
      if not Assigned(TForm(Form)) then  //强制一下
        Application.CreateForm(Formclass, Form);
      TForm(Form).ShowModal;//强制一下
    end;
      

  4.   

    if Form1=nil then
       Form1:=TForm1.Create(Application);
    Form1.ShowModal;
    FreeAndNil(Form1);放心吧,这样肯定没错,我一直都是这么做的。
      

  5.   

    procedure TForm1.CreateForm(FormClass: TFormClass; var Form);
    begin  
      if not Assigned(TForm(Form)) then  //需要类型转换
        Application.CreateForm(Formclass, Form);
      TForm(Form).ShowModal; //需要类型转换
    end;
      

  6.   

    if Form1=nil then
       Form1:=TForm1.Create(self);
    Form1.ShowModal;这个就可以啊
      

  7.   

    没有强制类型转换,使用Tform(Form)进行类型转换