Форум: "Основная";
Текущий архив: 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