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

Вниз

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

Наверх





Память: 0.5 MB
Время: 0.037 c
4-1152879465
Acidlex
2006-07-14 16:17
2006.11.26
Эмуляция нажатия клавиш в чужом окне


2-1162847539
eugeniya2006
2006-11-07 00:12
2006.11.26
События, нажатие кнопки


3-1159097963
Antoxa2005
2006-09-24 15:39
2006.11.26
Подскажите, а как "добраться" до примечаний полей и таблиц в FB.


3-1154341999
Reaktor
2006-07-31 14:33
2006.11.26
Помогите начать работать с книгами exel


15-1162801349
Vulix
2006-11-06 11:22
2006.11.26
Unknown picture file extension .ico





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