![]() |
|
|
![]()
|
|
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Скажите, возможно ли назначить айтемы, до того как комбобокс получит достопочтимый парент.
Такой код вываливается с ошибкой.
Это сообщение отредактировал(а) HappyLife - 4.12.2006, 16:36 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Именно в этих строчках? Должна вылететь чуть позже - на отрисовке формы.
Код неправильный - создается локальная переменная - указатель со сроком жизни в течение работы коструктора. После выхода из конструктора формы данный указатель будет недействителен. Нужно перенести объявление TComboBox * Manager; внутрь класса, в раздел private или куда еще - в зависимости от задач. |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Это не важно. Данный код лишь для наглядности.
Вылетает именно на строчке ADD |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
А какая ошибка?
Этот код точно наглядно представляет как получить AV Можно увидеть рабочий код? |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
|
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Наверное вопрос, вам был менее понятен, чем он есть на самом деле.
Я хочу знать, возможно ли без вот этой строчки
Создать Айтемы. У меня Комбо создается в отдельной DLL на независимом TWinControl Соответсвенно в момент загрузки ДЛЛ, создаются компоненты, и в самом последнем случае TWinControl получается парента из Формы. Или если это так существенно, то возможно ли словить событие присвоения парента, и уже после этого, создать айтемы. Так как время назначения парента неизвестно. Это сообщение отредактировал(а) HappyLife - 4.12.2006, 17:19 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
манипуляции со списком реализуются посылкой сообщений.
когда у комба нет родителя, слать сообщения некуда... |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Благодарю.
Но сам пример в более наглядном виде выглядит вот так
Возможно ли использовать что-то такое же независимое чтобы потом можно было разместить на любой форме набор объектов?. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Свойство Parent отвечает за визуализацию объекта - т.е. физически на каком контроле его расположить. Т.е. это должна быть форма, панель или еще что-нить.
Важнее свойство Owner - это свойство отвечает за владельца объекта. При уничтожении владельца будет автоматически вызваны деструкторы его (что-то слово не могу придумать, вещей или собственности). Так что на практике, думаю, что необходимо устанавливать оба эти свойства. При работе в DLL насколько я помню примеры, в качестве владельца устанавливался объект Application... |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Anikmar,
Благодарю Вас за объяснение. Все эти подробности конечно мной учтены. И были созданы TPanel TDrawGrid и др. Был создан даже ComboBox все на TWinControl, который я потом и разметил на форме. Но проблема остается с айтомами. Их я любом случае приходится назначать уже после того как я TWinControl размещу на форме. Проблема в том что мне нужно как-то отловить назначение парента, и создать айтомы, либо в ДЛЛ создать независимую функцию SetParent, но этот вариант мне дико не нравиться, по причине, что придется менять интерфейс, который благополучно работал, до того как я начал работать с TComboBox. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
сделай класс на основе TWinControl, в котором отлавливай какое-либо сообщение оконное, в котором и производи необходимую инициализацию, и используй его в длл вместо TWinControl.
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
В коде
Чтобы это работало, попробуйте установить свойство Parent у объекта Win Например: Win->Parent = this Либо воспользоваться конструктором с Handle Должно работать, но надо установить координаты, размеры, чтобы увидеть свой Combobox |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Anikmar,
Я знаю что нужно было установить свойство парент. Проблема была именно в том, как БЕЗ установки Parent решить задачу. Либо как отловить установку парента. Благодарю Вас за попытку помочь. dumb, Спасибо, очень дельный совет, кажется то что мне и нужно. Именно им я и решил воспользоваться. По логике, это именно то что мне и нужно. Но когда я занялся разработкой своего класса, я вспомнил о еще одном очень интересном классе TFrame, которй и помог решить мою задачу.
Все работает крайне идеально. Это сообщение отредактировал(а) HappyLife - 5.12.2006, 12:54 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Хм... Все равно же ведь Parent понадобился... Просто он скорее всего взялся из Application->MainForm.
Фактически то же самое, что и было выше:
Просто взят TWinControl уже более апгрейженный |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Anikmar,
Конечно понадобиться. Но я же говорил, что задача изначально была, присвоить парент, где-то посередине работы программы, в любой момент, а создать айтомы в самом начале. Парент назначается уже после загрузги ДЛЛ, а объект создается во время. Я делаю сильно-модульное приложение, чтобы главное окно модуля можно было кидать, в любое время и куда угодно в любой момент работы программы. Моему боссу может прийти в голову все что угодно, рисковать переделываем огромного количество кода я не хочу. Да и еще насчет того что TFrame это апргейженный TWinControl я в курсе, наверное в осном вопрос в этом и был, что подскажите мне такой компонент который не потребует немеделенного парента для создания TComboBox. Это сообщение отредактировал(а) HappyLife - 5.12.2006, 15:08 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
TComboBox создать без Parent легко - работать с ним будет нельзя.
Я просто не улавливаю выхода из ситуации: TFrame тоже не будет работать без Parent - шило на мыло получается по сути. Просто создание TComboBox и наполнение его значениями можно разделить (второе делать после присваивания Parent) - может таким путем пойти? |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Можно, но тогда нужно событие по которому нужно будет узнать, что парент уже назначен.
В этом случае dump мне предложил создать наследника от TWinControl. А проблемс легкая. Сначало создать - именно сначало создать, а потом штамповать где угодно. А комбо как вяснилось создать бей достойного парента нельзя. Точнее можно, но без айтомов. Это сообщение отредактировал(а) HappyLife - 5.12.2006, 15:55 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Немного не понял, а Parent назначается кем-то другим? В смысле не вашим кодом? Есть DLL, она инициализируется неким процессом - и уже может знать его главную форму - вот уже есть злосчастный Parent Если там его назначать рано, все равно шлепается данный комбобокс при помощи вызова какой-либо функци... Может там присваивать парент и инициализировать комбобокс? |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Anikmar,
Да можно считать что парент инициализируется кем-то другим. Задача ДЛЛ, лишь возвратить некое окошко прородителя TWinControl, которое EXE может шлепнуть куда угодно по своему усмотрению. Насчет второго варианта, он возможен, но придется менять интерфейс связи ДЛЛ и EXE и в любом случае модуль будет получаться слишком EXE зависимым чего я стараюсь избегать. Но создать функцию Init() в длл очень неплохой вариант. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Пока не увидел серьезной проблемы.
EXE вызывает DLL и получает некий ComboBox, который шлепает по собственному усмотрению? Тогда может быть проще EXE у себя создает ComboBox и просит DLL заполнить его значениями? |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Anikmar,
EXE вызывает TWinControl который и шлепает по своему усмотрению. А там фиг знает что и не только ComboBox; У меня проблем с тем как сделать не возникает. Проблемы больше по части как сделать самым наилучшим и эффективным способом. Чтобы одно не зависело от другого. Это сообщение отредактировал(а) HappyLife - 6.12.2006, 17:24 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |