Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизКак добавить своё свойство в форму? Найти похожие ветки
← →
Viking (2003-12-17 11:14) [0]Добрый день!
А не подскажите ли, уважаемые, что нужно сделать для того, чтобы добавить своё свойство в класс формы, чтобы оно было доступно через Object Inspector?
Просто создать свойство типа
TViewForm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
published
property MyProp: Boolean read FMyProp write MyProp default True;
end;
можно, но Object Inspector свойство MyProp не показывает...
В чём может быть дело?
← →
Плохиш_ (2003-12-17 11:18) [1]Я так думаю, что в хелпе этот раздел называется Templates или что-то похожее.
← →
TUser (2003-12-17 11:30) [2]Создай свой компонент-наследник.
← →
AbrosimovA (2003-12-17 11:31) [3]А ты св-во задаёшь в своей программе?
← →
Юрий Зотов (2003-12-17 11:42) [4]> Viking (17.12.03 11:14)
Нужно поместить эту форму в design-time пакет и в процедуре Register вызвать RegisterCustomModule. Свойство появится в формах-потомках, но без написания эксперта IDE работать будет не совсем удобно.
Проще всего - скачайте эксперт Сергея Орлика CCPack50, инсталлируйте и используйте.
← →
Viking (2003-12-17 12:02) [5]Так так...
п..п..амедленннее... я заппписваю... :-)
Задача следующая:
- есть базовая форма, наследник от TForm;
- я собираюсь от неё наследоваться в своих программах, поэтому
хочется добавить свойство (например, сохранение параметров формы)
в Object Inspector, чтобы ещё на disigntime-этапе установить его для формы-наследника;
- можно ручками каждый раз его в FormCreate "взводить" - но не совсем удобно (ленивые разработчики - лишнюю строчку в код добавить - лень! :-) )
- свой компонент - не совсе то, что нужно...
- про Темплэйты поподробнее можно? (но, думаю, тоже не то...)
- написание эксперта-IDE? Проще ручками добавлять свойство в формах... ;-)
- Про эксперт Сергея Орлика CCPack50? Где его взять?
← →
KSergey (2003-12-17 12:13) [6]Чес. слово - дешевле вписать строчку в вашем случае.
← →
Плохиш_ (2003-12-17 12:14) [7]>Viking (17.12.03 12:02) [5]
Берёшь какое-нибуть свойство у TForm, например Caption и смотришь, что с ним в соурсах делается.
PS. source - rules
← →
Viking (2003-12-17 12:25) [8]Первое, что я сделал - полез в Forms.pas
Там же - только замечательные строки
{ TForm }
TForm = class(TCustomForm)
public
. . .
published
. . .
property Caption;
. . .
и всё!
Поэтому и возник вопрос!
P.S. А что это за эксперт CCPack50 от Сергея Орлика?
И где же таки его взять?
← →
Плохиш_ (2003-12-17 12:58) [9]>Viking (17.12.03 12:25) [8]
> TForm = class(TCustomForm)
Вот она самая замечательная строка, от которой надо лезть дальше ;-)
← →
Viking (2003-12-17 13:04) [10]2 Плохиш_
Предлагаю слазить, а потом мне - такому бестолковому - пояснить...
;-)
Собственно вопрос - куда дальше то лезть?
Ну нету там методов (стандартных) для свойств формы!
← →
Юрий Зотов (2003-12-17 14:14) [11]> Viking
1. Задача Ваша совершенно ясна, пояснять не требуется, делалось это не раз.
2. Свой компонент, Template, репозиторий - все это не поможет. Пока Вы не вызовете RegisterCustomModule, никакие новые свойства формы в Object Inspector не появятся. Именно так и работает CCPack.
3. Где взять CCPack50 - отличный вопрос. Ответ - в Яндексе. Или в Гугле. Или в другом поисковике. Найдете за 15 секунд.
← →
Тимохов (2003-12-17 14:17) [12]2Viking
Блажен, кто верует в дизайн-тайм.
Да впиши ты ручками нужную строку и дело в шляпе!!!
← →
Amoeba (2003-12-17 14:24) [13]http://www.geocities.com/sergey_orlik/ccpack5.zip
← →
MV (2003-12-17 14:49) [14]А потом узнаешь, что под D6-D7 CCPack5 не пойдет!
← →
Amoeba (2003-12-17 15:03) [15]Есть версия портированная под D7
http://www.elists.org/pipermail/delphi-3p/2003-January/003248.html
← →
MV (2003-12-17 16:37) [16]Класс!
← →
Viking (2003-12-17 17:16) [17]Спасибо большое!
Теперь с CCPack, надеюсь, всё получится...
Правда, уверенность, что прописать св-во ручками гораздо быстрее и надёжнее, остаётся...
:-)
← →
Viking (2003-12-18 09:24) [18]Вот! Повозился на досуге с компонентом CCPack.
Несомненно, стоящая вещь!
Есть, правда несколько но...
Не ясен момент с наследованием форм.
Есть форма, на ней компоненты.
Я её добавляю в репозиторий, а затем наследую от неё другие
формы.
Как и положено, наследники наследуют компоненты своей формы-
родителя.
Но вот я задумал сделать у родительской формы некоторые
свои свойства published.
Использую CCPack Сергея Орлика, в процедуре Register
пишу RegisterCustomContainer, добавляю форму в package,
делаю install.
И что я вижу!
Теперь компоненты предка не переходят по наследству
потомкам! Наследуется чистая форма, остаётся только
радоваться своим опубликованным свойствам...
Самое интересное, что все эти свойства появляются в runtime!
А в disigntime ничего не видно - голая форма!
Но, как бы, хочется эти свойства всё таки видеть! Грид, к примеру, заполнять полями на этапе проектирования...
Так в чём же дело?
← →
Юрий Зотов (2003-12-18 10:16) [19]> Viking (18.12.03 09:24) [18]
При вызове RegisterCustomModule наследование КЛАССА, конечно, сохраняется, но наследование РЕСУРСОВ (т.е., ВИЗУАЛЬНОЕ наследование), увы, слетает напрочь. Форма поднимается пустой.
С этой проблемой я бился насмерть, два месяца, днем и ночью, без сна, еды и даже без пива.
:о)
Решал задачу написанием своего эксперта (аналог CCPack, но с расширенной функциональностью). Максимум, чего удалось добиться - нормально заливаются унаследованные ресурсы, но если посмотреть DFM, то первым словом видим object, а не inherited. То есть, IDE воспринимает залитый ресурс, как НОВЫЙ, а не как унаследованный - и, соответственно, если что-то изменить в предке, то потомок этих изменений не видит. Генерация в эксперте "правильного" DFM проблему не решает - среда его просто игнорирует и все равно лепит свой. Причина неизвестна.
Попытка замещения TCustomModule.CreateDesignerForm тоже успехом не увенчалась - метод не документирован, как его правильно писать - неизвестно. Наилучшие результаты (описанные выше) были достигнуты при заливке ресурсов в IDENotifier"е - но с уже отмеченным ПРИНЦИПИАЛЬНО ВАЖНЫМ недостатком.
Консультировался на конференции Borland по OpenToolsAPI - ничего нового, увы, не узнал. Хотя отвечали корифеи, но даже и они помочь, увы, не смогли.
Из всего этого я сделал вывод, что механизм поддержки визуального наследования Borland держит в секрете и без шпионско-хакерских штучек до него не достучаться. А со штучками вряд ли нужно - даже если и получится, то слишком ненадежно.
Практический вывод такой.
1. Форма, к которой добавлены published-свойства не должна иметь ресурсов - директиву $R можно (и нужно!) просто выкинуть.
2. Эта форма должна сидеть в design-time пакете и быть зарегистрированной через RegisterCustomModule (для чего удобно использовать CCPack - задействуется страница New).
3. От этой формы плодим наследника, набрасываем на него все, что нужно и помещаем в репозиторий БЕЗ вызова RegisterCustomModule. Все это делается обычными средствами IDE.
4. Форму рабочего проекта наследуем от формы из репозитория тоже обычными средствами IDE.
В итоге все же имеем и новые свойства, и визуальное наследование. Правда, одновременно имеем проблемы с построением иерархий форм - но, увы, похоже, что без доступа к внутренней документации Borland эти проблемы неразрешимы.
← →
Viking (2003-12-18 16:27) [20]> Юрий Зотов © (18.12.03 10:16) [19]
Спасибо за исчерпывающий ответ.
Я пришёл к такому же выводу.
Жаль...
Стройность наследования использовать было бы удобно.
Будем работаь так же, как и раньше, ручками в коде! :-)
Не очень красиво - зато всё правильно работает...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c