Недавно я нашел фрагмент кода, который создает экземпляр 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, но его конструктор не используется.
Thanx много, Мейсон. Сейчас это работает .... Чудесный ... :-) – lyborko
Рад быть в состоянии помочь! –