Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Как отобразить новое свойство в инспекторе объектов?   Найти похожие ветки 

 
FunkyByte ©   (2005-04-21 21:43) [0]

Доброго времени суток, уважаемые мастера. Создал как-то я форму, имеющую помимо прочего одно новое свойство:
property TrayIconFile: String read FTrayIconFile write FTrayIconFile;
чтобы в дальнейшем поместить её в репозиторий и вставлять в программы вместо обычной формы в случае необходимости.
Вопрос: как сделать так, чтобы это новое свойство отображалось в инспекторе объектов? Пробовал просто разместить его в разделе published в объявлении класса новой формы - ошибок не возникло (что радует), но и в инспекторе объектов свойство это не появилось (что не радует). Заранее благодарен.


 
Юрий Зотов ©   (2005-04-21 21:58) [1]

1. См. RegisterCustomModule. Свойство появится в наследниках.
2. На форме не должно быть ничего (все равно после вызова RegisterCustomModule на наследнике все исчезнет). Поэтому лучше всего просто убрать директиву {$R *.DFM}.

Для всего этого удобно использовать эксперт CFPack от Сергея Орлика.


 
FunkyByte ©   (2005-04-22 17:06) [2]

А можно поподробнее? Что такое RegisterCustomModule, что он делает и как с ним работать? Я так понимаю, что необходимо создать класс-потомок TForm с необходимым мне свойством, вынесенным в раздел published и куда-то его сохранить. А как сделать так, чтобы в проект добавлялась форма - потомок нового класса, описанного мной, а не потомок TForm?


 
King of Lamers ©   (2005-04-22 19:34) [3]

http://delphimaster.net/view/5-1090683370/&toprint=1


 
Юрий Зотов ©   (2005-04-22 23:15) [4]

> FunkyByte © (22.04.05 17:06) [2]

> Что такое RegisterCustomModule, что он делает

Если я правильно понимаю, то это процедура, которая связывает наш класс формы с неким дизайнером форм IDE.

> и как с ним работать?

Вызвать в процедуре Register пакета, который содержит наш класс формы. Детали см. в исходниках VCL.

> Я так понимаю, что необходимо создать класс-потомок TForm с
> необходимым мне свойством, вынесенным в раздел published

Точно так.

> и куда-то его сохранить.

В пакет. Сама форма - в run-time пакете, процедура Register - в design-time пакете.

> А как сделать так, чтобы в проект добавлялась форма - потомок
> нового класса, описанного мной, а не потомок TForm?

Есть два способа.

1. Создаете в проекте обычную форму, затем ручками меняете ее предка на свой, в uses прописываете нужный unit, сохраняете проект и переоткрываете его.

2. Пишете свой эсперт IDE, который на страницу New репозитория добавляет свою иконку и при клике по ней генерит код наследника нашей формы. Эксперт, естественно, помещается в design-time пакет.

P.S.
Такой эксперт существует в уже готовом виде - тот самый CFPack. Бесплатный и даже с исходниками.

> King of Lamers ©   (22.04.05 19:34) [3]

Спасибо за ссылку. Я уже почти забыл об этом обсуждении, а ведь и правда интересно было.


 
FunkyByte ©   (2005-04-24 17:38) [5]

Сделал как написано: создал модуль с описанием класса формы, сохранил в пакет, написал процедуру Register c вызовом RegisterCustomModule, установил пакет. Вариант с ручным изменением класса-предка новой формы, сохранением и переоткрытием проекта работает на ура. Пробовал воспользоваться CFPack-ом: добавил в пакет, входящий в эксперт, свою форму и установил этот пакет. В репозитории появилась вкладка с названием, совпадающим с именем пакета, на ней - иконка установки формы-потомка моего класса (кстати, проверял - работает, что не может не радовать). Но существует эта вкладка только до тех пор, пока пакет открыт. Может быть я неправильно пользуюсь этим экспертом? Тогда подскажите, plz, как его правильно юзать. А может быть кто-то знает, где подробно описано, как подобные эксперты IDE пишутся?

P.S.: смотрел исходники этого CFPack-а и так понял, что после его установки при добавлении формы в проект должно вываливаться окно, в котором можно указать класс-предок для добавляемой формы (ну не для красоты же добавлена соответствующая форма в исходники эксперта). У меня это окно почему то не вываливается.


 
Юрий Зотов ©   (2005-04-24 19:10) [6]

> добавил в пакет, входящий в эксперт, свою форму

Вот этого делать не нужно, пусть Ваша форма в Вашем пакете и остается, а пакет эксперта инсталлируйте в IDE отдельно.

Вместо прямого вызова RegisterCustomModule вызовите процедуру  регистрации формы в эксперте (как называется, не помню, но там не спутаешь, найдете).

После установки эксперта жмите в меню New - Other. Должна быть иконка Custom Form (или Custom Container, не помню уже точно), а при клике по ней и появляется окно выбора.

Как пишутся эксперты - на эту тему информации не так уж и  много. Ищите по ключевым словам OTAPI, Open Tools API, BorlandIDEServices.

Кое что (но мало) есть в справке (не ранее D6). А самое полезное - изучать код других экспертов (хотя бы того же CFPack) и код модулей в каталоге DelphiX\Source\ToolsAPI.


 
FunkyByte ©   (2005-04-25 21:18) [7]

Всё работает. Большое спасибо. Очень помогли.



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
3-1129808050
Андрей__
2005-10-20 15:34
2005.12.04
Поиск по Blob-полю в Firebird


14-1131833098
lookin
2005-11-13 01:04
2005.12.04
Идиотизм? Пьяный машинист метро


1-1131440816
DinoRay
2005-11-08 12:06
2005.12.04
непонятки с таймером 2


4-1128062639
ASDF234
2005-09-30 10:43
2005.12.04
Подскажите плиз. Почему не работает код с мапированием файла?


4-1128079057
Ландграф Павел
2005-09-30 15:17
2005.12.04
Таймер на выключение экрана