![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Есть класс:
Возможноли имея имя класса в виде строки т.е. 'TC' создать сам класс??? Т.е. чтобы было так:
Это сообщение отредактировал(а) ivan219 - 2.3.2008, 01:11 |
||||
|
|||||
| diamondd |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 11.9.2007 Репутация: нет Всего: нет |
в общем случае - не возможно...
это возможно только для потомков класса TPersistent и только в том случае, если это или форма, или компонент объявленный в форме, или этот класс зарегистрирован с помощью функции:
тогда возможно получение класса по его имени:
RTMF, это все есть в хелпе... Это сообщение отредактировал(а) diamondd - 2.3.2008, 01:46 |
||||
|
|||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
А по закрытию программы нужно снимать регистрацию и как??? |
|||
|
||||
| diamondd |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 11.9.2007 Репутация: нет Всего: нет |
нет. функция
ставится в секции initialization в модуле, где описывается класс (этот класс дожен быть потомком TPersistent). эта функция записывает класс в RegGroups (специальный объект для регистрации классов). т.е. при инициализации модуля Classes создается объект RegGroups, а при инициализации модуля, в котором описан класс, он (этот класс) регистрируется в объекте RegGroups. т.е. если ты пишешь свой класс (TMyClass), чтобы использовать свой класс в функции GetClass, то ты должен написать:
пример можно найти в модуле IdMessage. если же ты хочешь использовать класс, описанный в чужом модуле, то тебе придется самому дописать регистацию этого класса. напомню, что формы и компоненты, объявленные в форме, и даже по-моему те, которые зарегестированы на палитре компонентов регистируются автоматически. |
||||
|
|||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Не выходит
Если сделать через StringList.AddObject('',TC.Create); то всё получается а через GetClass('TC'); не срабатывает |
||||
|
|||||
| diamondd |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 11.9.2007 Репутация: нет Всего: нет |
ошибка тут:
конструктор возвращает указатель на вновь созданный элемент. вот простой пример:
|
||||
|
|||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Я так тоже делал:
Но результат такойже StringList.AddObject('', TC.Create); работает и кнопка появляется а StringList.AddObject('',A.Create); не появляется хот и ShowMessage(S.Objects[0].ClassName); показывает что он есть Добавлено через 3 минуты и 12 секунд Создаётся в печатление что при выполнении A.Create создаётся класс TC но при это конструктор этого класс не вызывается |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
TComponent наследник TPersistent, поэтому с ним тоже можно RegisterClass -------------------- Обижено школьников: 8 |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
ivan219,
у меня тоже была такая проблема, конструктор не вызывался, поэтому у классов которые ты создаешь конструктор должен быть...
-------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| ivan219 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Переделал но всё по прежнему.
Не компилит.
Компилит но вылетает ошибка. Добавлено через 2 минуты и 15 секунд Попробовал сделать свой виртуальный конструктор но результат тотже. |
||||||
|
|||||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Для того, что бы использовать виртуальные конструкторы для создания класса по имени, нужно использовать ссылки на класс (Class reference).
Пример в аттаче. Присоединённый файл ( Кол-во скачиваний: 11 )
_______________________.rar 2,04 Kb-------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Felan, и к чему это??? автор вроде об этом знает... ему надо класс создать по имени.
-------------------- There are always someone smarter than you... |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
||||
|
|||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
-------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
bems, lukas
А ведь был очень близко Добавлено через 5 минут и 20 секунд И ещё вопрос: Как я могу узнать какие классы именно я зарегестрировал??? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Именно ты? нет, не можеш
Пиши свою RegisterClass, которая будет вызывать оригинал, записывать результат в список и возвращать его наружу. Потом для решения твоего вопроса юзай этот список Это сообщение отредактировал(а) bems - 3.3.2008, 21:55 -------------------- Обижено школьников: 8 |
|||
|
||||
| ivan219 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Жаль думал есть стандартная.
Применение:
Всем спасибо вопрос решон |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |