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

Вниз

Published свойства компонентов   Найти похожие ветки 

 
Vlad2   (2002-09-09 07:16) [0]

Здравствуйте !
Кто знает, как решить такую задачку:
После установки в IDE некоего компонента (cmp) на форму (TForm)
в файле m.dfm этой формы прописываются значения published свойств cmp. Таким образом, при выполнении кода, после выполнения конструктора компонента, происходит установка этих значений. Я наивно написал в конструкторе cmp строчку "publishedPropertyAnyDate := Now;" и, естественно, получаю для этого свойства не текущую дату, а дату установки cmp в IDE. Как запретить это переприсваивание для published свойств компонента cmp ?


 
Ученик ©   (2002-09-09 08:16) [1]

Убрать из объявления свойства write FAnyDate.
А чем AnyDate отличается от Now ?


 
Vlad2   (2002-09-09 08:25) [2]

> Ученик
Убрать возможность write нельзя, во время работы нужно сохранить возможность изменения FAnyDate. По смыслу FAnyDate - это некое граничное значение, по умолчанию равное текущей дате. То, что устанавливается в IDE не имеет значения. Конечно, можно установить текущую дату где нибудь в другом конструкторе или инициализаторе, но неужели нет решения запретить установку значения этого свойства из m.dfm ?


 
Ученик ©   (2002-09-09 08:32) [3]

property AnyDate : TDateTime read FAnyDate write SetAnyDate;

procedure MyComponent.SetAnyDate(const Value : TDateTime);
begin
if not (csLoading in ComponentState) then
FAnyDate := Value
end;


 
Vlad2   (2002-09-09 08:50) [4]

> Ученик
Да, всё верно !
только не совсем понятно описание:
"This flag is set when the component is first created and not cleared until the component and all its children are fully loaded (when the Loaded method is called)."
Этот флаг устанавливается, когда компонент создаётся первый раз и не очищается до тех пор, пока компонент и все его детёныши полностью не загрузятся. Ничего не понимаю.


 
Ученик ©   (2002-09-09 08:54) [5]

>Vlad2 (09.09.02 08:50)
Флаг устанавливается на период загрузки компонента (и всех ...) из DFM-файла или ресурса.


 
Vlad2   (2002-09-09 08:59) [6]

> Ученик
О ! "из DFM-файла или ресурса.", тогда ясно. Спасибо, Ученик.
p.s. а кто же тогда я ?


 
Ученик ©   (2002-09-09 09:07) [7]

>Vlad2 (09.09.02 08:59)
Все мы ученики в каких-то вопросах :-)


 
Юрий Зотов ©   (2002-09-09 09:53) [8]

Обычно для таких вещей используется метод Loaded. В данном случае без разницы, но, вообще говоря, это грамотнее. Дело в том, что Loaded вызывается после загрузки ВСЕХ компонентов формы и поэтому в Loaded уже разрешены межкомпонентные ссылки.

Второе - метод SetXXX обычно приватный и потомкам недоступен, а вот Loaded они могут перекрыть и сами настроить свое поведение. Гибкость, однако.


 
Vlad2   (2002-09-09 10:09) [9]

> Юрий Зотов
т.е. сделать так: Loaded; override; и, далее, в текте Loaded
begin
inherited;
...
[setting published value] ?
end;
а метод set у меня специально protected.
Однако,
1. В этом случае значение св-ва будет устанавливаться три раза: конструктор, .dfm, Loaded override.
2. "в Loaded уже разрешены межкомпонентные ссылки." - как то бы поподробнее, если можно.



 
Alex4444444444   (2002-09-09 13:20) [10]

A zachem voobshe ego delat" published, esli ego NE nuzhno sohranyat"? Pochemu ne prosto public?


 
Валерыч   (2002-09-10 03:06) [11]

Если не надо хранить в dfm значение published свойства, можно воспользоваться директивой stored в объявлении данного свойства



Страницы: 1 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
6-61230
Alibaba
2002-07-16 13:58
2002.09.19
Как подождать результата соединения клиента с сервером?


1-61193
White Tiger
2002-09-08 15:21
2002.09.19
Common Controls на палитре Delpi 6 и 7


1-61093
Infinity2
2002-09-09 23:12
2002.09.19
Спрятать заголовок окна в TaskBar е


14-61262
Mega
2002-08-23 00:03
2002.09.19
Fujitsu MPG3204AT......


3-60976
bmv
2002-08-27 15:10
2002.09.19
Индексы в TClientDataSet