C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Разработка компонета, Свойство типа указатель на объект
Deem
Отправлено: 29.03.2004, 09:59


Мастер участка

Группа: Участник
Сообщений: 327



При создании компонента надо сделать свойсво типа указатель на другой объект (такие в 6 инспекторе объектов подсвечиваются красным). Создаю, делаю его published ( с Set... ,Get... и default = NULL). Компилирую-инсталлирую... В дизайн-тайме кладу на форму. В Инспекторе объектов свойсво есть, выпадающий список имеющихся объектов необходимого типа тоже есть. Можно выбрать, срабатывет Set... моего компонента. Все работает. Но если тот( другой) объект, указатель на который я положил в свойство своего компонента, выкинуть из формы (удалить, короче), то у инспектора объектов начинаются глюки, когда мыша находится радом или над описаным свойством моего компонента.
Вобщем, как-то ( я думаю) удаляемый объект, адрес которого я положил в свое свойсво, должен сообщить моему компоненту или билдеру об удалении, чтоб это свойство сбросить в NULL.

Или там какая-то другая технология? Подскажите, плиз.
olegenty
Отправлено: 29.03.2004, 10:37


Ветеран

Группа: Модератор
Сообщений: 2412



скорее всего ты что-то где-то неверно написал в Set и Get, потому что у меня исторически всё работало без глюков... хотя, я ни Set, ни Get не пользовался, вернее, было не надо.
вот рабочий кусок:

CODE

...
private:
   TpFIBDatabase *m_pDb;
...
published:
   __property TpFIBDatabase Database = {read = m_pDb, write = m_pDb};
...


и всё работает давным давно...
Deem
Отправлено: 29.03.2004, 15:52


Мастер участка

Группа: Участник
Сообщений: 327



private:
TIBDatabase *m_pDb;
...
__published:
__property TIBDatabase * Database = {read = m_pDb, write = m_pDb};

У меня не нашлось FIB, поэтому я так сделал.
Однако, исталлировать компоненту на смог, т.к.
сначала " надо "

Add dbrtl
Add ibxpress.

Жму Ok.

Далее:

Cannot load package 'dbrtl60'. It contains unit 'SqlTimSt', 'which it also contained in package 'DeemLib'

А потом сделал так:

private:
TPreviewBox *PB;

__published:
__property TPreviewBox * PreviewBox = {read = PB, write = PB};

Глюк тот же. Таботать-то работет. Но если объект (уже указанный в свойстве) типа TPreviewBox * удаляешь с формы (в дизайн-тайме), инспеткор объектов фигеет.
olegenty
Отправлено: 30.03.2004, 08:14


Ветеран

Группа: Модератор
Сообщений: 2412



dbrtl60 принудительно присоедини к DeemLib. а лучше, маленький сорец пришли...
olegenty
Отправлено: 30.03.2004, 08:33


Ветеран

Группа: Модератор
Сообщений: 2412



Ё!!!
Только что проверил свой старый проект, и точно — глюк есть. В пятом билдере его не было... ХЗ, я в прострации...
xTrim
Отправлено: 30.03.2004, 09:37


Машинист паровоза

Группа: Участник
Сообщений: 208



Все верно, перекрывай виртуальный метод Notification и проверяй не тот ли компонетнт на который ты ссылаешься послал opRemove. Так было кстати всегда.
olegenty
Отправлено: 30.03.2004, 10:07


Ветеран

Группа: Модератор
Сообщений: 2412



Может быть, оч. может быть. Просто я как кинул компонент, так он и лежал.
А я уж грешным делом подумал, что дизайнерские пакеты принудительно ещё включить надо. Было что-то у меня с ними связано. А сейчас я от разработки "ядренных" компонентов отошёл: отлаживать труднее.
Deem
Отправлено: 30.03.2004, 17:27


Мастер участка

Группа: Участник
Сообщений: 327



xTrim, спасибо. Тут все работает (с указателем на объект). Я нигде не встречал подобной штуки. Книжка по билдеру 6 перед носом толстенная лежит: там тоже нет.


Вот бы еще разобраться с эти модулями, из-за которых компоненты не грузятся. Что-то тут какая-то фигня. Когда на на паскале пишеш, нет же файлов-заголовков. Обязательно uses будет. А это похуже.
И получается, когда мой новый компонент использует другой, уже инсталлированный в пол-литре, его чо, нельзя всвавлять в палитру? Наследовал я стандартные компоненты, и нормально. Вот попробовал IBX — и не вышло. А как крутиться-то?

Отредактировано Deem — 30/03/2004, 18:30
olegenty
Отправлено: 31.03.2004, 09:45


Ветеран

Группа: Модератор
Сообщений: 2412



Да нет же, просто принудительно скажи своему пакэджу, чтобы он пользовался ракаждем IBX.
это в окне Package->Requires->Add, и добавь туда IBX.
Ограничение тут следующее: каждый вновь создаваемый пакет может истопльзовать модули другого существующего, только включая его в секцию Requires.

Если не получится, иходник тестовый пришли — посмотрю.
Deem
Отправлено: 05.04.2004, 12:25


Мастер участка

Группа: Участник
Сообщений: 327



to olegenty

Слушай, ты мне глаза раскрыл. Я-то думал, если требуется, то прилинкуется модуль, а потом орать будет, что уже есть. Оказывается, это наоборот: избавление от линковки. Я пока не игрался с этим. Но помню, что когда при компиляции вылезло окно "нужны модули" и я сказал — добавляй, они появились в списке required. Но установить компоненты не получилось.
Ладно, может я ошибаюсь. Посмотрю внимательнее. smile.gif
olegenty
Отправлено: 05.04.2004, 12:56


Ветеран

Группа: Модератор
Сообщений: 2412



ты только тему добей, в смысле, резюмируй, у тебя пропёрло, или нет?
Deem
Отправлено: 06.04.2004, 16:26


Мастер участка

Группа: Участник
Сообщений: 327



Короче, я поигрался снова, с нуля. Все делал в автоматическом режиме.
NewComponent
Создаю TMyPanel от TPanel, ничего не добавляю, сохраняю файл.
Далее InstallComponent в новый пакедж My (компонент беру с диска, TMyPanel.cpp )
Выходит проект My.bpk
Компилю его. Все класс. Добаляю компоненту свойство TIBDatabase* Database. Добаляю include IBDatabase.hpp. Компилю,
и появляется окно "требуются пакеджи" : ibxpress и dbrtl . Я жму Ок, и они попадают в requires. Снова компилю. Все нормально. Инстолю — и хрен. Уже есть ... ля-ля-тополя... Удаляю требующиеся пакеты. Снова компилю, снова крики "добавьте". Снова соглашаюсь. Добавилось, откомпилилось, инсталлировалось.

Резюме: глюки. Но это уже не страшно для меня. Я знаю что работать заставить можно. А это — самое главное. Всем спасибо. smile.gif
olegenty
Отправлено: 07.04.2004, 07:35


Ветеран

Группа: Модератор
Сообщений: 2412



пришли в архиве сорец пакета, постараюсь поправить. (это ДОЛЖНО работать без глюков. первое ядро моего проекта было написано именно с использованием IBX и именно так).

yevseyev@az.kamaz.org
Deem
Отправлено: 13.04.2004, 11:31


Мастер участка

Группа: Участник
Сообщений: 327



Спасибо, да ладно. Там и сорца-то нет. Я добавил только три строчки. Остальное сгенерил автомат. Это может глюк локальный у меня. Хрен с ним. Разобрался — и ладно.

Вернуться в Вопросы программирования в C++Builder