Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Загрузка компонента   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
14-1078001008
VID
2004-02-28 23:43
2004.03.28
Мне нужен ваш совет


3-1074854595
Asdor
2004-01-23 13:43
2004.03.28
dbExpress и MSSQL


7-1073563430
Sensor
2004-01-08 15:03
2004.03.28
Взаимодествия звук. карты, модема, и прложениями


3-1077779416
Johnmen
2004-02-26 10:10
2004.03.28
Узнать размер данных в поле varchar


14-1077854047
R
2004-02-27 06:54
2004.03.28
Какой язык программирования для Internet выбрать