Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
3-1129900566
Tom
2005-10-21 17:16
2005.12.04
SQL server+ ADO + Multithreading


14-1131945015
Некто
2005-11-14 08:10
2005.12.04
МультиЗагрузчик ОС


2-1131824166
Виталий80
2005-11-12 22:36
2005.12.04
Как сделать ф-цию парсинга


3-1129878933
BerkeleyMan
2005-10-21 11:15
2005.12.04
TClientDataset


2-1132406247
Дева
2005-11-19 16:17
2005.12.04
О логах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский