![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поменять значение property в уже созданных компонентах? [D7, Win2k]
IDenS © (2006-11-24 16:18:00)Привет всем!
У меня такая проблема. Был создан компонент с property=False. После чего он был активно использован во многих формах. Возникла необходимость сделать property default True. Можно ли как-то автоматом поменять во всех уже созданных компонентах значение property с False на True?
Vlad433 (2006-11-27 17:07:00) [1]Пишем маленький эксперт пересохраняющий все формы проекта. В компоненте default убираем вообще. Шерстим экспертом. Добавляем default true. Еще раз шерстим. Все.
DimaBr (2006-11-27 09:01:00) [2]Юрий Зотов ©
> А там, где не было было прописано ничего, свойство после открытия формы все равно будет иметь значение True.
Там где не было прописано ничего (Old False) - получется TRUE, кажется неправильно...
Юрий Зотов (2006-11-25 12:05:00) [3]> IDenS (24.11.06 16:18)
Насколько я понял, ранее было default False. Значит, там, где свойство было установлено в True, это явно прописано в DFM, а там, где оно оставалось False - не прописано ничего.
ОК. Модицируем компонент (у свойства ставим defaulf True, в конструкторе приcваиваем ему True) и перекомпилируем пакет. Больше ничего не делаем. Что произойдет при открытии старых форм?
Там, где в DFM было прописано True, свойство после открытия формы будет иметь значение True. А там, где не было было прописано ничего, свойство после открытия формы все равно будет иметь значение True.
Вроде бы, именно это и требовалось?
PS
Если нет, то обратите внимание на метод Loaded компонента. Он автоматически вызывается сразу после загрузки DFM - поэтому, перекрыв его, можно скорректировать значение свойства нужным образом. Это тоже позволит добиться правильной работы компонента без перелопачивания кучи DFM и без риска пропустить какие-то из них.
Наиль (2006-11-24 18:00:00) [4]Я бы сделал так.
1. В компоненте сделал бы дополнительное свойство, пустьPropChanged:boolean stored true.
Оно должно быть самым первым из свойств. В конструкторе задать FPropChanged:=false;
2. Пусть MyProp свойство, которое мы хотим изменить (обозначить stored true). Тогда в методе SetMyProp записал бы
if not PropChanged then FMyProp:=not Value else FMyProp:=Value;3. метод SetPropChanged оставл бы пустым т.е.
FPropChanged:=true;
begin
end;
3.1 Build исправленый компонент
4. Открыл бы все файлы с формами.
5. Каждый файл Pas файл нужно изменить (пробел в конец любой строки) и сохранить.
6. Остаётся убрать, то что добавлено в п.п.1-3
6.1 Build исправленый компонент
7. Опять открыть все формы, закрыть окна сообщений, через Ignore All, сохранить.
PS. Метод с коленки. Если я ошибся, то поправте меня.
Суть метода в следующем:
При открытии формы считываются свойства.
При первом открытии свойство выворачивается на изнанку.
При втором и далее игнорируется. Определяется это свойством PropChanged.
DimaBr (2006-11-24 16:56:00) [5]default указавает что не следует сохранять ли свойство в ресурс, если значение свойства равно указанному.
Следовательно все компоненты, у которых это свойство было установленно в true - записали это в ресурс, а которые False нет.
Теперь, вы меняете наоборот.
Что же получается. Компоненты, у которых свойство записано (true пишется)прочитаются нормально, у которых нет (false не пишется) получат значение по умолчанию то-есть TRUE.
Ужас !!!
Ответ на вопрос. Можно ли как-то автоматом поменять во всех уже созданных компонентах значение property с False на True ?
1. Устанавливаем свойство NoDefault или Stored True, (перекомпияем компонент) переоткрываем все формы в корорых встречается этот компонент и сдвинув немного форму нажимаем кнопочку сохранить.
Потом компилим компонент с новым значением поумолчанию.
2. Пишем програмульку, которая отркывает формы (DFM) поочереди, ищет в них компонент и дописывает нужное значение.
Удачи...
StriderMan (2006-11-24 16:46:00) [6]написать программулину которая перелопатит все DFM. Или найти готовую