Главная страница
    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.044 c
15-1196009945
Kostafey
2007-11-25 19:59
2007.12.23
Интеграция Turbo JBuilder 2007 и Subversion


1-1191747484
integery
2007-10-07 12:58
2007.12.23
как открить документ не сохраняя, если он в TMemoryStream


2-1196306724
snake-as
2007-11-29 06:25
2007.12.23
не могу воспроизвести звук


2-1196232702
roughneck
2007-11-28 09:51
2007.12.23
Окна всегда поверх всех окон


15-1195783594
Forest
2007-11-23 05:06
2007.12.23
Двухядерные процессоры работают под Виндос МЕ или 9х серии ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский