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

Вниз

deprecated directive   Найти похожие ветки 

 
pasha_golub ©   (2006-10-09 16:10) [0]

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

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

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


 
Ketmar ©   (2006-10-09 16:15) [1]

снести свойство нафиг. узнает сразу, как только попробует откомпилировать. %-))


 
pasha_golub ©   (2006-10-09 16:36) [2]


> узнает сразу, как только попробует откомпилировать

Узнают, до компиляции дело не дойдет даже. При загрузке узнают. Свойство-то, puiblished. :0) А потом отловят и дадут по черепухе. :-)

Есть идея вставить

{$MESSAGE WARN "Deprecated property"}

Но как-то коряво выглядит. :)


 
Ketmar ©   (2006-10-09 16:37) [3]

а пусть при каждом использовании этого свойства MessageBox() выводит. тогда и загрузится, и откомпиляется, но использовать точно не будут.

зыж за здоровье автора при таком подходе я никакой ответственности не несу. %-)


 
guav ©   (2006-10-09 16:45) [4]

Наверное никак, иначе Ctl3D было бы deprecated .

Можно сделать свой редактор свойства, при первом его вызове сообщать что свойство устарело, после чего отдавать стандартному редактору ;-)


 
Rule ©   (2006-10-09 16:47) [5]

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


 
Ketmar ©   (2006-10-09 16:48) [6]

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


 
Джо ©   (2006-10-09 16:48) [7]

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


 
Ketmar ©   (2006-10-09 16:51) [8]

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


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

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

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


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

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

Всем спасибо


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

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

Жаль :(


 
Ketmar ©   (2006-10-09 17:01) [12]

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


 
pasha_golub ©   (2006-10-09 17:03) [13]


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

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


 
Ketmar ©   (2006-10-09 17:04) [14]

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


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

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


 
guav ©   (2006-10-09 17:20) [16]

> [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;


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

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


 
Kolan ©   (2006-10-09 19:47) [18]

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

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


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

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

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


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


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

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


 
pasha_golub ©   (2006-10-10 12:53) [21]


> guav ©   (09.10.06 17:20) [16

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

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


 
guav ©   (2006-10-10 15:44) [22]

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

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

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


 
guav ©   (2006-10-10 15:55) [23]

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


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


 
pasha_golub ©   (2006-10-12 15:20) [24]


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


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

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



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

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

Наверх




Память: 0.52 MB
Время: 0.066 c
15-1162870132
Slider007
2006-11-07 06:28
2006.11.26
С днем рождения ! 4 ноября


3-1158907906
Ольга
2006-09-22 10:51
2006.11.26
Как заставить SUM обрабатывать NULL


2-1162898517
alucard
2006-11-07 14:21
2006.11.26
Подскадине где компонент SocketConnection?


11-1139334284
goit
2006-02-07 20:44
2006.11.26
Помогите с trayIcon


15-1162823059
Виктор1985
2006-11-06 17:24
2006.11.26
Аналог RSDN@Home для дельфимастера?