![]() |
|
|
![]()
|
|
| 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 |
|||
|
||||
![]()
|
| Правила форума "С++ 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. |