Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

deprecated directive [D5, D6, D7]


Страницы:   1 2

pasha_golub ©   (2006-10-09 16:10:00) 

Не могу добавить к свойству класса:

TSomeClass = class
...
published
property SomeOldProperty: integer read FProperty write SetOldProperty; deprecated;
end;

Судя по всему ограничение языка. А как обойти ситуацию? Чтобы дать пользователю знать об этом?


pasha_golub   (2006-10-12 15:20:00) [1]


> guav ©   (10.10.06 15:55) [23]


> вот как проектировать надо :-)

Я бы с удовольствием, да только завишу от внешнего источника. У меня компонент-обертка.


guav   (2006-10-10 15:55:00) [2]

> Ну, не тащить же их право дело до смерти.


можно было бы обратится за примерами к VCL, но...
помойму там вообще нет таких свойств - вот как проектировать надо :-)


guav   (2006-10-10 15:44:00) [3]

Чтобы свойство исчезло из Обджект Инспектора, достаточно перенести его в public.
При этом, его можно упомянуть в DefineProperties, чтобы оно читалось из старых dfm'ок.
Например у невизуальных компонентов Left и Top сохраняется в dfm, но в Обджет Инспекторе таких свойств нет (да и вообще, их нигде нет). Чтобы не писалось в новые dfm'ки, последний параметр в Filer.DefineProperty указывается False.

Очевидно, для компиляции старого кода его придётся оставить хотя бы в public; если пользователи компонента использовали извращения с RTTI (вроде самопальной сохранялки ини), то, возможно, его придётся даже сохранить в published.

Сохранённые формы .dfm, где сохранены свойства, которых более нет ни в published ни в DefineProperties, открываются средой с соответствующими ворнингами. Как они открываются в рантайме - не знаю, надо проверить, подозреваю что даже без ворнингов.


pasha_golub   (2006-10-10 12:53:00) [4]


> guav ©   (09.10.06 17:20) [16

Ого, однако. :-)

И все-таки вопрос, блин, шире. Как избавляться от ненужных паблишед свойств? Ну, не тащить же их право дело до смерти.


Kolan   (2006-10-09 20:03:00) [5]


> использовании оного идентификатора.
>

А вот чего я недочитал. Действительно работатет, благодарю :)


Джо   (2006-10-09 19:54:00) [6]

> Хелп по  deprecated прочел, даже, вроде понял.

Значит, не понял :) Там пишут о том, что объявление deprecated (при включенных {$HINTS ON} {$WARNINGS ON}) порождает warning при использовании оного идентификатора.


Kolan   (2006-10-09 19:47:00) [7]

А просветите, что должно получится. Хелп по  deprecated прочел, даже, вроде понял. Написал procedure AAA;  deprecated; -> F9.

А что должно было получится?


Ketmar   (2006-10-09 17:22:00) [8]

бр-р-р-р...
%-)


guav   (2006-10-09 17:20:00) [9]

> [12] Ketmar ©   (09.10.06 17:01)


> изврат, правда? %-)


Я круче придумал, только проверить надо
type
 deprecatedinteger = (deprecated = MaxInt);
 {свойство SomeOldProperty больше не используется
  этот странный типа введён чтобы код, использующий это св-во не компилился,
  но dfm загружалась. Чтобы таки продолжать использовать это св-во,
  надо приводить к этому типу}

 TSomeClass = class
 private
   FProperty: deprecatedinteger;
   procedure SetOldProperty(const Value: deprecatedinteger);
 published
   property SomeOldProperty: deprecatedinteger read FProperty write SetOldProperty;
 end;


guav   (2006-10-09 17:14:00) [10]

Если компонент поставляется с исподниками, можно убрать св-во с директивой для восстановления, а чтобы загрузка dfm нормально состоялась, упомянуть его в DefineProperty.


Ketmar   (2006-10-09 17:04:00) [11]

>[13] pasha_golub(c) 9-Oct-2006, 17:03
>Не то слово. :)
но, в принципе, вполне решение. %-) исходников синт. разбора есть. немножко напильника -- и вперёд. %-)


pasha_golub   (2006-10-09 17:03:00) [12]


> Ketmar ©   (09.10.06 17:01) [12]

Не то слово. :)


Ketmar   (2006-10-09 17:01:00) [13]

поставляй с пакетом утилиту типа lint, которая пройдётся по исходникам/dfm-кам и накричит кучей варнингов. или даже пусть сама автоапгрейдит. изврат, правда? %-)


Джо   (2006-10-09 17:00:00) [14]

> [9] guav ©   (09.10.06 16:54)
> > А если на методы-аксессоры поставить, не подойдет?
>
> Поиск по deprecated в исходниках D7 нашел TISAPIThreadPool
> , где пытались так сделать. Но ворнингов нет.

Жаль :(


pasha_golub   (2006-10-09 16:59:00) [15]

Ясно. Значит буду писать большими красными буквами в хелпе. И как всегда на сапорте будет тыща писем, ибо никто его не читает. :-)

Всем спасибо


guav   (2006-10-09 16:54:00) [16]

> А если на методы-аксессоры поставить, не подойдет?

Поиск по deprecated в исходниках D7 нашел TISAPIThreadPool , где пытались так сделать. Но ворнингов нет.


Ketmar   (2006-10-09 16:51:00) [17]

>[7] Джо(c) 9-Oct-2006, 16:48
>А если на методы-аксессоры поставить, не подойдет?
см. [3] %-)


Джо   (2006-10-09 16:48:00) [18]

А если на методы-аксессоры поставить, не подойдет?


Ketmar   (2006-10-09 16:48:00) [19]

>[5] Rule(c) 9-Oct-2006, 16:47
>а в рантайме что делать ???
плакать...


Rule   (2006-10-09 16:47:00) [20]

guav ©   (09.10.06 16:45) [4]
а в рантайме что делать ???


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо