![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
deprecated directive [D5, D6, D7]
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]
а в рантайме что делать ???