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

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

Создать объект, зная его класс в строковой переменной [D7]


Алексей92 ©   (2008-02-23 18:00:00) 

Добрый день и с праздником!

Хочу написать следующее:
Creator(sTypeObj:string;slPropObj:stringlist):tObject;
т.е. примерно то, что делает делфи при чтении dfm
например
Creator('TButton';slASL) должно сделать кнопку с параметрами из slASL.
Могу, написать конечно:
if  sTypeObj='TButton' then
begin
:=tButton.Create(self);
длина=
ширина=
end
и т.д., но мне кажется это не правильно, должен быть способ какой-то..

Не подскажете?


GrayFace   (2008-02-23 21:30:00) [1]

Это только часть механизма. У формы есть published поля, соответствующие компонентам - для этих полей в RTTI есть название класса и ссылка на класс. Если published поля нет, используется уже GetClass.
Еще есть FindClass, бросающий исключение, если класс не найден.


Семеныч   (2008-02-23 19:59:00) [2]

> Алексей92   (23.02.08 18:00)  

Механизм, который подсказал Сергей, работает не только для компонентов. Он работает для класса TPersistent и всех его потомков, а к ним относятся не только компоненты - к ним же относится TFont, TBrush и многие другие (дерево наследования классов VCL можно посмотреть в Object Browser). Именно этот механизм и используется при загрузке DFM (где все объекты - заведомые потомки TPersistent). А чтобы установить значения свойств по их строковым именам, используется RTTI (см. модуль TypInfo).


Сергей М.   (2008-02-23 18:29:00) [3]

Подскажем.
Для объектов-наследников TComponent (каковым является твой "например"):

var
 SomeComponentClass: TComponentClass;
 SomeInstanceOfComponnentClass: TComponent;
 
..

 SomeComponentClass := GetClass('TButton');
 SomeInstanceOfComponnentClass := SomeComponentClass.Create(владелец);

..

implementation
 RegisterClass('TButton');


Наверх

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