Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
15-1223638615
MadSnake
2008-10-10 15:36
2008.12.14
freerep и IBO_D6


2-1225965108
Саня
2008-11-06 12:51
2008.12.14
Генерация чисел


2-1225477915
RichEdit
2008-10-31 21:31
2008.12.14
Из RichEdit в Word


4-1202106023
MiHoY
2008-02-04 09:20
2008.12.14
Горячие клавищи чужого окна


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский