从TObject中继承的对象无法调用GetClass()函数,如何动态创建。
如定义一个新类:TLineObj = class(TObject);
....
如何使用 TObjectClass(GetClass('TLineObj')).Create(self)完成对象的生成。
因为只有从TPersistent继承的对象才支持RegisterClass()。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TLineObj=class(TPersistent)
      end;  TLineObjClass=class of TLineObj;  TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      LineObj:TLineObj;
    begin
      try
        LineObj:=TLineObjClass(GetClass('TLineObj')).Create ;
      finally
        LineObj.Free;
      end;
    end;Initialization
      RegisterClass(TLineObj);end.
      

  2.   

    我说的是从TObject中继承如何办,从TPersistent继承的我也知道。
    现在只想探讨一下TObject继承的对象动态生成问题。例如:在MFC中从CObject继承的对象就可以动态生成。
      

  3.   

    GetClass是通过给定一个类的名称来返回一个已经注册的TPersistent类!返回的值是一个类引用类型,最上层类型是TPersistentClass注册类使用的是RegisterClass函数或者是RegisterClasses函数所以既然返回的是一个TPersistent类,那么实现注册的类只能从TPersistent类去派生,而不能从TObject类去派生!个人不清楚是否有其他方法来实现动态功能....
      

  4.   

    既然你是从Tobject直接派生出来的类,那当然没办法,vcl是不支持多重继承的
    如果MFC中Cobject可以的话,那可能因为他是用多重继承的吧