Форум: "Основная";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];
ВнизСоздать объект, зная его класс в строковой переменной Найти похожие ветки
← →
Алексей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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c