Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.63 MB
Время: 0.041 c
1-11978
афвуд
2003-12-19 12:21
2004.01.05
Как создать обьект класса, зная только имя класса.


3-11777
KIR
2003-12-09 17:35
2004.01.05
TBookMark vs TBookMarkStr


1-11992
Nix
2003-12-18 17:04
2004.01.05
Множество форм


1-11872
ruslan_as
2003-12-15 11:51
2004.01.05
Помогите посчитать часы


3-11841
gestern
2003-12-09 21:26
2004.01.05
sql





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский