Форум: "Прочее";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];
ВнизИзменение 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.005 c