Форум: "Компоненты";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизКак поменять значение property в уже созданных компонентах? Найти похожие ветки
← →
IDenS (2006-11-24 16:18) [0]Привет всем!
У меня такая проблема. Был создан компонент с property=False. После чего он был активно использован во многих формах. Возникла необходимость сделать property default True. Можно ли как-то автоматом поменять во всех уже созданных компонентах значение property с False на True?
← →
StriderMan © (2006-11-24 16:46) [1]написать программулину которая перелопатит все DFM. Или найти готовую
← →
DimaBr (2006-11-24 16:56) [2]default указавает что не следует сохранять ли свойство в ресурс, если значение свойства равно указанному.
Следовательно все компоненты, у которых это свойство было установленно в true - записали это в ресурс, а которые False нет.
Теперь, вы меняете наоборот.
Что же получается. Компоненты, у которых свойство записано (true пишется)прочитаются нормально, у которых нет (false не пишется) получат значение по умолчанию то-есть TRUE.
Ужас !!!
Ответ на вопрос. Можно ли как-то автоматом поменять во всех уже созданных компонентах значение property с False на True ?
1. Устанавливаем свойство NoDefault или Stored True, (перекомпияем компонент) переоткрываем все формы в корорых встречается этот компонент и сдвинув немного форму нажимаем кнопочку сохранить.
Потом компилим компонент с новым значением поумолчанию.
2. Пишем програмульку, которая отркывает формы (DFM) поочереди, ищет в них компонент и дописывает нужное значение.
Удачи...
← →
Наиль © (2006-11-24 18:00) [3]Я бы сделал так.
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.
← →
Юрий Зотов © (2006-11-25 12:05) [4]> IDenS (24.11.06 16:18)
Насколько я понял, ранее было default False. Значит, там, где свойство было установлено в True, это явно прописано в DFM, а там, где оно оставалось False - не прописано ничего.
ОК. Модицируем компонент (у свойства ставим defaulf True, в конструкторе приcваиваем ему True) и перекомпилируем пакет. Больше ничего не делаем. Что произойдет при открытии старых форм?
Там, где в DFM было прописано True, свойство после открытия формы будет иметь значение True. А там, где не было было прописано ничего, свойство после открытия формы все равно будет иметь значение True.
Вроде бы, именно это и требовалось?
PS
Если нет, то обратите внимание на метод Loaded компонента. Он автоматически вызывается сразу после загрузки DFM - поэтому, перекрыв его, можно скорректировать значение свойства нужным образом. Это тоже позволит добиться правильной работы компонента без перелопачивания кучи DFM и без риска пропустить какие-то из них.
← →
DimaBr (2006-11-27 09:01) [5]Юрий Зотов ©
> А там, где не было было прописано ничего, свойство после открытия формы все равно будет иметь значение True.
Там где не было прописано ничего (Old False) - получется TRUE, кажется неправильно...
← →
Vlad433 © (2006-11-27 17:07) [6]Пишем маленький эксперт пересохраняющий все формы проекта. В компоненте default убираем вообще. Шерстим экспертом. Добавляем default true. Еще раз шерстим. Все.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c