【发布时间】:2009-12-08 10:50:03
【问题描述】:
最近我发现了一段代码,它可以从一个字符串中创建一个 TButton 的实例:'TButton' 被用作参数。
见"Is there a way to instantiate a class by its name in Delphi?"
我正在尝试将任何对象的已发布属性保存到 XML 文件(工作正常),最近我想从 XML 文件重新创建这些对象。在这个文件中写入了应该创建哪个类(例如 TButton),然后是一个属性列表,这些属性应该加载到这个运行时创建的对象中。
上面的例子展示了如何做到这一点,但它不适用于我自己的班级。见以下代码:
TTripple=class (TPersistent)
FFont:TFont;
public
constructor Create;
Destructor Destroy;override;
published
property Font:TFont read FFont write FFont;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TTripple.Create;
begin
inherited;
FFont:=TFont.Create;
end;
destructor TTripple.Destroy;
begin
FFont.Free;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TButton, TForm, TTripple]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CRef : TPersistentClass;
APer : TPersistent;
begin
// CRef := GetClass('TButton');
CRef := GetClass('TTripple');
if CRef<>nil then
begin
APer := TPersistent(TPersistentClass(CRef).Create);
ShowMessage(APer.ClassName); // shows TTripple, what is correct
if APer is TTripple then (APer as TTripple).Font.Color:=90;
/// Here I get error message, because TTriple was not created... ?!?!?!
end;
end;
我无法通过。 TTripple 对象可能已创建,但未使用其构造函数。
【问题讨论】:
标签: delphi