form:="TForm".Create(nil)如何将上面的"TForm"转换成TForm???请各位帮忙。

解决方案 »

  1.   

    form:="TForm".Create(nil)
    編一个类厂
      

  2.   

    Constructors and class references(构造函数和类引用)
    构造函数可通过一个类引用类型的变量进行调用,这允许创建编译时类型并不确定的对象。比如,
    type TControlClass = class of TControl;
    function CreateControl(ControlClass: TControlClass;
    const ControlName: string; X, Y, W, H: Integer): TControl;
    begin
    Result := ControlClass.Create(MainForm);
    with Result do
    begin
    Parent := MainForm;
    Name := ControlName;
    SetBounds(X, Y, W, H);
    Visible := True;
    end;
    end;
    CreateControl 函数需要一个类引用类型的参数,它指定创建何种控件,函数使用这个参数来调用构造函数。因为类标志符(类名)表示一个类引用的值,所以能使用它作为参数来调用CreateControl 创建一个实例。比如,
    CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);
    使用类引用来调用的构造函数通常是虚方法,实际调用的构造函数(指实现)由运行时类引用的类型决定。
      

  3.   

    2004-4-6 11:48:29    如何根据名字来动态创建对象[问题的提出]:
        我希望根据一个字符串,来创建该类的对象,例如我给定'TButton',那么能在运行的时候,动态创建Button出来?不要告诉我用if来判断或者用case来判断等等~,那样的话,有几百个控件的话,岂不是晕倒?[解决方案]:
        请参考下面的代码,下面的代码演示了三种控件的动态创建,若需要动态创建其他的,请修改那个数组常量即可:function DynCreateControlByName(AClassName: string; AOwner: TWinControl = nil): TControl;const
    /// You can add any class if you want!
      ControlClass : array[0..2] of TPersistentClass = (TButton, TEdit, TLabel);var
      Cls : TControlClass;begin
      Result := nil;
      RegisterClasses(ControlClass);
      Cls := TControlClass(GetClass(AClassName));
      if Cls = nil then exit;
        Result := Cls.Create(AOwner);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      Control : TControl;
    begin
      Control := DynCreateControlByName(Edit1.Text);
      if Control <> nil then
        with Control do
        begin
          Parent := Self;
          Left := Random(Self.Width) - Width;
          Top := Random(Self.Width) - Height;
          Perform(WM_SETTEXT,Length(Edit1.Text),integer(pchar(Edit1.Text)));
          Show;
        end;
    end;
    ---------------------------------------procedure TForm1.Button2Click(Sender: TObject);
    begin
      TWinControlClass(FindClass('TQRDBText')).Create(Self);
    end;initializationRegisterClasses([TQRDBText]);finalization
      UnregisterClasses([TQRDBText]);
    end.
      

  4.   

    我觉得你应该改变一下思路,这个思想是解释执行代码常用的,比如Foxpro这些。
      

  5.   

    RegisterClass(GetClass(ClassType: String));