![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание экземпляров класса по его наименованию. [D6]
Vitalik © (2004-07-08 13:01:00)Привет!
У меня есть базовый класс, например TMyClass. У него есть несколько потомков. НАпример TMyClass1 = class(TMyClass), TMyClass2 = class(TMyClass), TMyClass3 = class(TMyClass) и т.д.
TMyClass абстрактный. Потомки загружаются из файла.
Мне нужно, чтобы в файле, кроме свойств самих классов также хранилась информация о том, какой это из наследников. Например, в виде строки типа 'TMyClass1'.
Потомки должны создаваться как экземпляры того или иного класса непосредственно перед считыванием из файла всех свойств.
То есть, если в файле написано, что сохранён экземпляр класса 'TMyClass1', то сначала создавался бы экземпляр именно этого класса, а потом уж загружались все его свойства.
Я понимаю, что можно это всё сделать при помощи оператора case. Но интересен другой подход.
Например, что-то такое.
function createClass(AClassName: String): TMyClass;
var
c: TClass;
My: TMyClass;
begin
c: =FindClass(AClassName);
My := c.create;
result := my;
end;
Ну вот как-то так. Потому что наследников будет много, и хочется это дело автоматизировать.
Спасибо!
cae (2004-07-08 15:27:00) [1]procedure TForm1.BitBtn2Click(Sender: TObject);
var
Reference : TComponentClass;
Tc : TComponent ;
Class_ : TClass;
begin
Class_ := GetClass('TEdit');
if Class_ = nil then
begin
ShowMessage('Класс не зарегистрирован !') ;
// чтобы этого не происходило, нужно ранее указать - RegisterClass(TEdit);
exit ;
end ; // if Class_ = nil
Reference := TComponentClass(Class_);
Tc := Reference.Create(Self) ;
if Tc is TControl then
with TC as TControl do
begin
Parent := Self ;
Left := 10;
Top := 10 ;
end // with
end;
Тимохов (2004-07-08 13:06:00) [2]посмотри в f1
registerclass findclass