![]() |
|
![]() ![]() ![]() |
|
fenix666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
Есть xml файл с набором компонентов, с определенными для них свойствами. Необходимо создать эти компоненты на форме. Пробовал следующим образом, не получилось:
Память выделяется, проверяю obj->ClassName() возвращает 'TButton'. Но при вызове функции SetPropValue выходит ошибка EAccessViolation. Может кто знает как все-таки динамически создать объект нужного типа |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 3 Всего: 97 |
|
|||
|
||||
fenix666 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
Так я и сам знаю, но этот метод не подходит, т.к. если на форме тока кнопки то да, а если там около 20 разных компонентов, для каждого описывать создание не удобно, хочется универсальную функцию написать |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
есть плагин к builder'у, который позволяет набросать и настроить визуально компоненты на форме, а потом он генерит код.
Можно ещё собственный парсер *.dfm файлов написать ( в принципе, ничего сложного ) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
fenix666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
Спасибо за совет, но парсер отпадает, т.к. в билдере тока основную форму в редакторе далаю, а все остальные генерирую. Генератор кода тоже не вариант, т.к. смысл хранить код для 4-8 форм, если они могу и не вызваться%) Сомневаюсь что все так извращаются и пишут сотни строк ненужного кода. Проще функцию написать, для создания формы по заранее написанному конфигу. |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
интересно, а как будет анализироваться конфиг, если парсер не годится? За счет белой магии?
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
Редактор форм в билдере есть не что иное как генератор этих самых
> заранее написанных конфигов Я ж тебе и предлагаю сделать парсер этих конфигов (dfm), а включать cpp, h и dfm в проект необязательно Добавлено через 13 минут и 36 секунд Не хочу нарываться на hollywar, но в Qt это уже сделано с помощью QUiLoader. Посмотри в эту сторону. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А почему бы не воспользоваться системой стриминга самого Builder'а. Создать поток с формой (.dfm или бинарной), а потом через TStream::ReadComponent(TForm*)
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
fenix666, приведенный способ чистой воды хак, поскольку не вызывается конструктор объекта жди сюрпризов.
Можно воспользоваться недокументированной особенностью объекта TApplication. Дело в том, что класс TApplication довольно безопасный и при создании формы внимательно проверяет что созданный объект строго является формой. Однако до создания объекта он не может выяснить что за метакласс ему подсунули и в результате он может запросто создать любого наследника TComponent. Например:
Есть еще правильный вариант. Написать Паскалевский модуль, в котором будет всего одна функция, которая честно реализует функцию CreateComponent по всем правилам. И добавить этот модуль в проект на билдере. Не ясно почему авторы билдера до сих пор не написали такую необходимую в билдере функцию. Видимо, как обычно, все внимание на мэинстрим. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
fenix666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
Даже если парсер dfm написать, то возникает опятьже вопрос, как всетаки создать динамически компонент(контрол)? Конструкцию типа Tclass *cls = new Tclass() не подходит, нужно чтото универсально, чтобы для любого класса создавалось Это сообщение отредактировал(а) fenix666 - 8.7.2010, 10:37 |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
fenix666, почему именно
в dfm содержится указание типа класса
ну и делай
хотя, предыдущие советы по TStream::ReadComponent, Application->CreateForm и CreateComponent проще реализовать -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
fenix666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
Нельзя ли поподробнее? |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |