Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизЗагрузка компонента Найти похожие ветки
← →
dima_shapkin © (2004-03-11 14:39) [0]Такой вопрос...
Есть некокое свойство компонента вынесенное в published, являющимся потомком TPersistent. В нем определено поле типа TStringList, допустим F1 и в кострукторе - F1.add("Это классный компонент!")... это для начальной инициализации. Так вот в чем проблема, если изменить значение F1 в Object Inspеctor"е на любое другое отличное от пустого, то как бы все замечательно при загрузке компонента из потока оно становится тем, что указано в инспекторе в режиме дизайна. Но если оно пустое то при загрузке компонента как бы есенно ничего не меняется и остается, то что создано в конструкторе. А как бы узнать есть ли такое свойство в DFM? Постотрев DFM видно что при пустом значении пропадает строчка которая хранит значение F1.Text...
← →
Reindeer Moss Eater © (2004-03-11 14:41) [1]nodeafult
← →
Алхимик © (2004-03-11 14:42) [2]Ну так зачем в DFM хранить пустую строчку?
← →
Reindeer Moss Eater © (2004-03-11 14:43) [3]Хотя нет, это только для ordinal types
← →
Reindeer Moss Eater © (2004-03-11 14:48) [4]В нем определено поле типа TStringList, допустим F1 и в кострукторе - F1.add("Это классный компонент!")... это для начальной инициализации.
А зачем?
Если комонент на форме (в DFM), то у него будет вызван loaded.
Если его на форме нет, и он создается в рантайме - инициализируй список после вызова конструктора.
← →
dima_shapkin © (2004-03-11 15:00) [5]Бррр...
В конструкторе инициализация параметра и в любом случае она будет, кинули ли компонент на форму или создали в рантайме...
Вопрос то в чем, если он пустой, то остается тот что инициализируется в конструкторе...
← →
Reindeer Moss Eater © (2004-03-11 15:02) [6]Ты мне скажи, зачем в конструктое инициализировать свойство, для которого неприменимы директивы default и nodefault????
← →
Reindeer Moss Eater © (2004-03-11 15:04) [7]Если csDesigning in ComponentState инициализируй.
Если нет - не инициализируй.
Вот и все дела
← →
Юрий Зотов © (2004-03-11 15:04) [8]Либо в объявлении свойства добавьте stored True, либо перенесите F1.add("Это классный компонент!") из конструктора в Loaded.
← →
Reindeer Moss Eater © (2004-03-11 15:08) [9]If a property has no stored directive, it is treated as if stored True were specified.
То есть это и так уже есть по умолчанию
← →
Юрий Зотов © (2004-03-11 15:43) [10]> Reindeer Moss Eater © (11.03.04 15:08) [9]
1. Если stored не определено в предке.
2. Реальный способ сохранения зависит от того, как определен DefineProperties в предке. А у TStrings там сидит процедура DoWrite.
← →
Reindeer Moss Eater © (2004-03-11 15:51) [11]Согласен.
Хотя это и решение "в лоб".
Неправильно это - инициализировать в конструкторе что-то паблишед не имеющего default в спецификации свойства, не зная будет ли вызван лоадед.
← →
dima_shapkin © (2004-03-11 16:14) [12]Короче кто кого не догоняет, прошу еще слова...
Есть некий компонет и у его есть свойство
published
property Title : TChartTitle read FChartTitle write SetChartTitle;
где TChartTitle = class(TPersistent) у которого в конструкторе...
constructor TChartTitle.Create(Chart : TChartLineEasy);
begin
inherited Create;
FTitle.Add("TChartLineEasy");
...
то есть инициализируем поле FTitle, чтобы было некокое значение при создании компонента. Вот так в чем загвоздка, если в дизайн-тайме это значение менять в инспекторе, то при загрузги компонента из потока ему будут присвоено то значение, которое указано в инспекторе. Но если оно пустое то изменяться оно не будет и поэтому останется то, которое присвоено в конструкторе. Как обойти это?
← →
Reindeer Moss Eater © (2004-03-11 16:19) [13]Ты читал вообще что тебе тут рассказали?
← →
dima_shapkin © (2004-03-11 16:27) [14]Неправильно это - инициализировать в конструкторе что-то паблишед не имеющего default в спецификации свойства, не зная будет ли вызван лоадед - ???????
Так это полная ерунда
← →
Reindeer Moss Eater © (2004-03-11 16:30) [15]Седьмой пост читал?
← →
Юрий Зотов © (2004-03-11 16:37) [16]> dima_shapkin © (11.03.04 16:27) [14]
Уточните:
- реализацию метода SetChartTitle в компоненте;
- объявление свойства Title в TChartTitle (и методы Get/Set для него, если таковые имеются);
- есть ли в TChartTitle методы Assign и DefineProperties (и, если есть, их реализацию).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c