Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.14;
Скачать: CL | DM;

Вниз

Создать объект, зная его класс в строковой переменной   Найти похожие ветки 

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

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

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

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


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

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

var
 SomeComponentClass: TComponentClass;
 SomeInstanceOfComponnentClass: TComponent;
 
..

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

..

implementation
 RegisterClass("TButton");


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.12.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
15-1223616390
Slider007
2008-10-10 09:26
2008.12.14
С днем рождения ! 10 октября 2008 пятница


2-1225361355
Sw
2008-10-30 13:09
2008.12.14
dll


15-1223467983
KSergey
2008-10-08 16:13
2008.12.14
Замена винчестера в RAID-массиве


2-1226041296
Zhekson
2008-11-07 10:01
2008.12.14
Приоритет или ускорение???


15-1223568892
TStas
2008-10-09 20:14
2008.12.14
Последний и очередной ММП