Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

создание экземпляров класса по его наименованию. [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо