Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

свойства-объекты в VCL

499
26 июля 2007 года
madjahed
149 / / 14.01.2004
Создаю VCL компонент. В нём есть свойсво ColorDialog, что-то типа такого:
Код:
class MyClass
{
...
private:
TColorDialog *FClrDlg;
public:
   MyClass()
   {
       FClrDlg=new TColorDialog(this);
   }
__published:
__property TColorDialog * ColorDialog={read=FClrDlg, write=FClrDlg};


Так вот, всё отлично когда изменяешь переменные и свойства этого ColorDialog в рантайме, но в design-time в инспекторе объектов, когда переменную изменяю, то в реальности, во время выполнения, переменной не присваивается значение, указанное в инспекторе объектов.

Короче говоря,
если изменить Tag свойства ColorDialog на 10 (В инспекторе объектов), то во время выполнения, Tag=0, а не 10. Почему у объектов-свойств не зименяются их собственные свойства?


И вообще интересно, когда Builder присваивает всем свойствам значение, указанное в инспекторе объектов? Сразу после выполнения конструктора?

Всем спасибо.
7.3K
27 июля 2007 года
H010d Freeze
143 / / 08.08.2006
Цитата:

Короче говоря,
если изменить Tag свойства ColorDialog на 10 (В инспекторе объектов), то во время выполнения, Tag=0, а не 10. Почему у объектов-свойств не зименяются их собственные свойства?



Для свойства в качетсве write-accessor'а надо не поле указать, а метод, в котором Assign делать:

 
Код:
...
__property TColorDialog * ColorDialog={read=FClrDlg, write=SetClrDlg};
...
void __fastcall MyClass::SetClrDlg(TColorDialog *AValue)
{
  if (AValue) FClrDlg->Assign(AValue);
}


Цитата:

И вообще интересно, когда Builder присваивает всем свойствам значение, указанное в инспекторе объектов? Сразу после выполнения конструктора?


В конструкторе базового класса (TPersistent или TComponent, если не ошибаюсь) происходит загрузка свойств компонентов из DFM.

309
27 июля 2007 года
el scorpio
1.1K / / 19.09.2006
__property TColorDialog * ColorDialog={read=FClrDlg, write=FClrDlg}; // убрать нафиг
Указатели на объекты, которые создаются в классе, извне меняться не должны. Значит, и возможность такую создавать нельзя
499
27 июля 2007 года
madjahed
149 / / 14.01.2004
Пожалуйста, прочитайте ещё раз мой вопрос. Я не спрашивал как правильно присваивать свойства-объекты в VCL компонентах, а почему Билдер не присваивает во время выполнения проги значения свойствам, которые находятся внутри этих объектов VCL компонента.
7.3K
27 июля 2007 года
H010d Freeze
143 / / 08.08.2006
А в DFM-файл при редактировании свойств в дизайнере билдер сохраняет введенные значения?
7.3K
27 июля 2007 года
H010d Freeze
143 / / 08.08.2006
Цитата:

Билдер не присваивает во время выполнения проги значения свойствам, которые находятся внутри этих объектов VCL компонента.



Ты сам-то понял, что написал? :)
Все билдер делает, если правильно его об этом попросить.

499
29 июля 2007 года
madjahed
149 / / 14.01.2004
Я ПОНЯЛ, что написал. Я не думал, что чтение написанного мною вызовит столь сложный логический анализ, что ты ни чего не понял.

Для "потомков": Билдер не будет сохранять все вложенные свойства ОБЪЕКТА-СВОЙСТВА, если ему не вызвать в конструкторе VCL компонента Object->SetSubComponent(true).
10
29 июля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: madjahed
Для "потомков": Билдер не будет сохранять все вложенные свойства ОБЪЕКТА-СВОЙСТВА, если ему не вызвать в конструкторе VCL компонента Object->SetSubComponent(true).


Умолчательная политика VCL следующая (если не вызывать дополнительных методов):

  • Свойства типа TComponent считаются ссылками и подразумевается, что они сохраняются своим родителем (или сами собой, если являются корневым контейнером)
  • Свойства, наследованные от TPersistent, но не являющиеся потомками TComponent, сохраняются без дополнительных телодвижений - достаточно описания такого свойства как published.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог