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

Вниз

Изменение published свойств компонентов   Найти похожие ветки 

 
pasha_golub ©   (2009-05-29 13:48) [0]

Тут вот надо бы мне удалить пару свойств published, и переиначить опеределине типа для одного свойства.

Как бы это красиво сделать, чтобы юзеру было не больно, когда он загрузит форму?


 
Юрий Зотов ©   (2009-05-29 16:59) [1]

Без перекомпиляции - вряд ли получится.

А если с перекомпиляцией, то надо сначала пролопатить DFM. Могу выслать самопальный компонент, который позволяет этот приятнейший процесс частично автоматизировать.

Работает по принципу SAX - парсит DFM (хоть текстовые, хоть бинарные) и генерит события. В обработчиках этих событий можно вытворять что угодно.

То есть: делаем служебный проект, в нем кидаем на форму этот компонент и пишем обработчики его событий, а в них - все, что хотим. Потом запускаем этот проект и натравливаем его на каталог с исходниками (предварительно их забэкапивши, на всякий случай).

Потом соответственно переделываем твой компонент и перекомпилируем его пакет, а потом - перекомпилируем весь проект. Вуаля.


 
Игорь Шевченко ©   (2009-05-29 17:01) [2]


> Работает по принципу SAX - парсит DFM (хоть текстовые, хоть
> бинарные) и генерит события. В обработчиках этих событий
> можно вытворять что угодно.


Юра, а он у тебя свойства в элементах Collection не научился обрабатывать ?
Если да, то был бы крайне признателен за апдейт...


 
Тимохов_   (2009-05-29 17:03) [3]

я руками делаю такое - alt+f7 в Total Commander по dfm (есно в тексте они должны быть), котом открываю все в notepad++, делаю поиск сроки по открытым файлам, меняю - либо ручками либо заменой по всем файлам (notpad++ это умеет делать).


 
pasha_golub ©   (2009-05-29 19:12) [4]

Уточню. Я классы отдаю юзеру. Инталлятором. То есть он бедняга у себя на машине делает апдейт, запускает ИДЕ, а тут ему хренякс: "Property trampampam doesn"t exist. Do you want to ignore?"

В принципе DevExpress таким не гнушался, если я не ошибаюсь. они просто в Release Notes прямо писали,мол при загрузке будет ругаться, игнорируйте.

Это еще хорошо, что компонент-то специфический, то есть он явно будет заюзан не более чем один раз на все приложение. А если там кнопка какая, али еще чего. Что неужели так и таскать за собой deprecated properties.

Кстати, идею вот толко что придумал. А если сначала эти свойства понизить до public, а потом в следующий релиз вообще и выкинуть. Сработает?


 
Юрий Зотов ©   (2009-05-30 19:51) [5]

> А если сначала эти свойства понизить до public...

... то при загрузке старого DFM все равно будет "Property trampampam doesn"t exist" (из-за отсутствия RTTI на них).

Тогда уж лучше сразу их выкинуть.


 
Petr V. Abramov ©   (2009-06-01 11:58) [6]


> Юрий Зотов ©   (30.05.09 19:51) [5]


> Тогда уж лучше сразу их выкинуть.

они могут быть в коде задействованы, не только в dfm, сначала эти свойства понизить до public гуманнее с этой т.з.


 
Юрий Зотов ©   (2009-06-01 14:02) [7]


> Petr V. Abramov ©   (01.06.09 11:58) [6]

Рубить хвост по кусочкам?
:o)


 
test ©   (2009-06-01 14:28) [8]

pasha_golub ©   (29.05.09 19:12) [4]
DevExpress ***, когда собирается пачка их творений разных версий, проще застрелиться чем заставить это творчество работать.

SUBJ
А ни как нельзя обратную совместимость сделать, оставить оба варианта рабочими и старый и новый?


 
pasha_golub ©   (2009-06-01 14:54) [9]


> test ©   (01.06.09 14:28) [8]


> А ни как нельзя обратную совместимость сделать, оставить
> оба варианта рабочими и старый и новый?


Так и сделал. Но убрать все-таки надо. Не таскать же за собой. Мне все же больше волнует как из перечисляемого типа выкинуть одно значение... Вот его как раз таскать не хочется.


 
test ©   (2009-06-01 15:14) [10]

pasha_golub ©   (01.06.09 14:54) [9]
Через дериктивы препроцессора/*не помню как там они называются*/?


 
pasha_golub ©   (2009-06-01 16:16) [11]


> test ©   (01.06.09 15:14) [10]
> Через дериктивы препроцессора/*не помню как там они называются*/?
>

Например? Не вкурил чего-то...


 
test ©   (2009-06-01 16:42) [12]

uses
{$IFDEF MSWINDOWS}
 Windows, ShellAPI,
{$ELSE}
 Libc,
{$ENDIF}
{$IFNDEF VCL}
 Types,
{$ENDIF}
 Classes;

Я просто не помню как их зовут по человески.))


 
pasha_golub ©   (2009-06-01 18:46) [13]

Директивы условной компиляции их зовут. Я понял о чем речь идет, я не понял просто как их можно использовать.


 
Petr V. Abramov ©   (2009-06-01 22:55) [14]


> Юрий Зотов ©   (01.06.09 14:02) [7]


> Рубить хвост по кусочкам?
> :o)

хвост - не что-то жизненно важное, в данном случае время на зализывание ран лучше больше, чем меньше.


 
test ©   (2009-06-02 06:36) [15]

Я про что то подобное, у сишников стандартная заморочка.
{$IFDEF OLD}
x =  {1,2,3}
{$ELSE}
x =  {1,3,4}
{$ENDIF}


 
pasha_golub ©   (2009-06-02 10:55) [16]


> test ©   (02.06.09 06:36) [15]

А откуда я узнаю, сохранялся ли dfm уже с новыми свойствами или еще был со старыми. Сохранять версию? Как-то уж очень гуманно. :)


 
vuk ©   (2009-06-02 11:09) [17]

to test ©   (01.06.09 14:28) [8]:
>DevExpress ***, когда собирается пачка их творений разных версий, проще
>застрелиться чем заставить это творчество работать.

А вот не надо про DevExpress. У нас достаточно нехилая часть их VCL-ных продуктов заюзана. Никогда проблем не было.


 
vuk ©   (2009-06-02 11:15) [18]

to pasha_golub:
Чтобы не было ругани на отсутствующие свойства, можно попробовать их обработать в DefineProperties.

to test ©   (01.06.09 14:28) [8]:
>DevExpress ***, когда собирается пачка их творений разных версий, проще
>застрелиться чем заставить это творчество работать.

А вот не надо про DevExpress. У нас достаточно нехилая часть их VCL-ных продуктов заюзана. Никогда проблем не было.


 
vuk ©   (2009-06-02 11:17) [19]

Сори за дубль. Отвалился коннект. Можно первое сообщение удалить.


 
test ©   (2009-06-02 11:51) [20]

pasha_golub ©   (02.06.09 10:55) [16]
Да, я про это, поставить им warning что версия старая скоро удалим(depricated).

vuk ©   (02.06.09 11:09) [17]
Когда используются компоненты с 3 по 5 версию в одном проекте, запустить это чудо последствия лоботомии, можно только с бубном и жертвоприношением девственного(в упаковке) железа, а поменять все эти свистульки никчемные на стандартные компоненты низя, пользователь привык и так работает. Любая система которая не поддерживает обратную совместимость ИМХО головная боль.


 
vuk ©   (2009-06-02 12:06) [21]

to test ©   (02.06.09 11:51) [20]:
>Когда используются компоненты с 3 по 5 версию в одном проекте,
>запустить это чудо последствия лоботомии, можно только с бубном и
>жертвоприношением
Одновременно замечательно жили в одном проекте, например, гриды разных версий. Без всяких бубнов. Видимо, что-то делаем не так. :)

>а поменять все эти свистульки никчемные
Ну так нефиг использовать то, что реально не нужно.


 
pasha_golub ©   (2009-06-02 12:22) [22]


> vuk ©   (02.06.09 11:15) [18]
>
> to pasha_golub:
> Чтобы не было ругани на отсутствующие свойства, можно попробовать
> их обработать в DefineProperties.
>

За пинок в нужно направлении был бы очень признателен.


> Юрий Зотов ©   (30.05.09 19:51) [5]
>
> > А если сначала эти свойства понизить до public...
>
> ... то при загрузке старого DFM все равно будет "Property
> trampampam doesn"t exist" (из-за отсутствия RTTI на них).
>  

Не поверил. Проверил. Таки да, ругается. Опыт - критерий истинности.


> vuk ©   (02.06.09 11:15) [18]


> А вот не надо про DevExpress. У нас достаточно нехилая часть
> их VCL-ных продуктов заюзана.

Особых проблем тоже не наблюдаю с тех пор, как ушел от нас парень, желавших странного, а именно правил безбожно генофонд ДевЭкспрессов. С тех пор у нас только одна правка, без которой и правда никак.


 
pasha_golub ©   (2009-06-02 12:24) [23]


> test ©   (02.06.09 11:51) [20]
>
> pasha_golub ©   (02.06.09 10:55) [16]
> Да, я про это, поставить им warning что версия старая скоро
> удалим(depricated).


Я не смог поставить deprecated для свойств. А вручную поднимать {$MESSAGE WARN "This property is deprecated"} как-то стремно. Меня юзерь матюгать будет.


 
pasha_golub ©   (2009-06-02 12:36) [24]

> vuk ©   (02.06.09 11:15) [18]
>
> to pasha_golub:
> Чтобы не было ругани на отсутствующие свойства, можно попробовать
> их обработать в DefineProperties.
>

Нашел. Вот ведь. Изящно, мать его за ногу. Век живи - век учись. Спасибо!


 
vuk ©   (2009-06-02 12:38) [25]

to pasha_golub ©   (02.06.09 12:22) [22]:
>За пинок в нужно направлении был бы очень признателен.
DefineProperties предназначен для сохранения/загрузки не-published свойств, вызывается из TReader, если RTTI для свойства не найдена. Собственно, можно при помощи него сделать отработку свойства, которое в DFM-е еще есть, а в компоненте уже нет. Как использовать - смотри генофонд, он там много где заюзан.


 
pasha_golub ©   (2009-06-02 13:17) [26]

Пасиб, Леш! Именно то, что нужно. +100


 
pasha_golub ©   (2009-06-02 15:20) [27]

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


type
TPropOption = (opFirst, opSecond, opThird);
TPropOptions = set of TPropOption;

...
 property PropProperty: TPropOptions;


И надо мне допустим opSecond убрать. Как этот момент отловить?
Заранее спасибо


 
atruhin ©   (2009-06-03 05:22) [28]

> [27] pasha_golub ©   (02.06.09 15:20)

Сделать чтобы в текущей версии значение не устанавливалось/сохранялось.
А когда нибудь, потом, убрать.


 
pasha_golub ©   (2009-06-03 13:30) [29]


> atruhin ©   (03.06.09 05:22) [28]


> Сделать чтобы в текущей версии значение не устанавливалось/сохранялось.
>
> А когда нибудь, потом, убрать.

Мысли сходятся. :)) Но я любитель рубки Гордиевых узлов. Думал, есть изящный метод.



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

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

Наверх




Память: 0.55 MB
Время: 0.011 c
10-1159243302
Думкин
2006-09-26 08:01
2009.08.02
OWC.SpreadSheet


15-1243936751
Imag
2009-06-02 13:59
2009.08.02
Склейка фоток под музыку


2-1244444905
LDV
2009-06-08 11:08
2009.08.02
CF_DIB и CF_BITMAP


15-1243701028
Медвежонок Пятачок
2009-05-30 20:30
2009.08.02
раздача торрента через аппаратного клиента


2-1244237871
Цукор5
2009-06-06 01:37
2009.08.02
TWebBrowser получение элементов формы