Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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;
FPropChanged:=true;
3. метод SetPropChanged оставл бы пустым т.е.
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.045 c
2-1195902105
ice321i
2007-11-24 14:01
2007.12.23
Аудит в InterBase 6.5


6-1176124977
paradox
2007-04-09 17:22
2007.12.23
подключение через сокеты


15-1195980167
Lang
2007-11-25 11:42
2007.12.23
C++ vs C#


15-1195157054
palva
2007-11-15 23:04
2007.12.23
Тут недавно спрашивали, как шифроваться в аське


1-1191232247
Yurikon
2007-10-01 13:50
2007.12.23
Директивы компилятору





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский