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

Вниз

порядок инициализации пропертей   Найти похожие ветки 

 
vecna ©   (2004-10-18 00:47) [0]

есть

TMyClass = class(TSomeClass)
private
 fprop1: boolean;
 fprop2: boolean;
 function SetProc(i: index; val: boolean);
published
 property prop1: boolean index 0 read fprop1 write SetProp;
 property prop2: boolean index 0 read fprop2 write SetProp;
end;

При создании формы, значения fprop1 и fprop2 инициализируются значениями из dfm в следующем порядке: сначала fprop1 потом fprop2. Как сделать чтоб сначала инициализировался fprop2.

вот. объяснил как мог =)


 
GuAV ©   (2004-10-18 00:53) [1]

Например, так :-)

TMyClass1 = class(TSomeClass)
private
fprop1: boolean;
fprop2: boolean;
function SetProc(i: index; val: boolean);
published
property prop2: boolean index 0 read fprop2 write SetProp;
end;

TMyClass = class(TMyClass1)
published
property prop1: boolean index 0 read fprop1 write SetProp;
end;


 
vecna ©   (2004-10-18 00:53) [2]

Хм... если я пральна понимаю, то нада сделать так
published
 property prop2: boolean index 0 read fprop2 write SetProp;
 property prop1: boolean index 0 read fprop1 write SetProp;

да ?


 
vecna ©   (2004-10-18 00:54) [3]

GuAV,
А если у меня таких свойств, порядок вызова которых важен штук 20 ??? =)))


 
GuAV ©   (2004-10-18 00:57) [4]

А вообще говоря порядко чтения зависит от порядка записи. Т.е.запишешь Dfm в обратном порядке - прочтется в обратном.
Только на запись из дезайтайма повлиять способа не вижу. Разве что вручную поменять при сборке.


 
Petr V. Abramov ©   (2004-10-18 01:01) [5]

1. Использовать DefineProperties
 или
2. В процедурах SetXXX учитывать, что форма еще не загружена ( if csLoading in ComponentState ) и доиниализировать в Loaded


 
GuAV ©   (2004-10-18 01:02) [6]

Предъявлять требование к порядку инициализации свойств - плохая практика. Компоненты вообще должны быть написаны так чтоб по возможности каждое свойство всегда было использовать.


 
vecna ©   (2004-10-18 01:09) [7]

2GuAV
>Предъявлять требование к порядку инициализации свойств - плохая практика.

Тут ты не прав. Бывают, и очень часто, моменты, где порядок крайне важен, например TSpeedButton.Down. Крайне важно, чтобы GroupIndex был проинициализирован раньше.

2Petr V. Abramov
Спасибо, но в моем случае - это из пушки по воробьям... =)

порядок инициализации зависит от порядка в published.
По крайней мере, так работает =)


 
Reindeer Moss Eater ©   (2004-10-18 09:30) [8]

Есть такой очень полезный виртуальный метод Loaded.
Кто его не знает, тот слезы проливает.
В смысле мучается с порядком инициализации паблишед свойств.


 
vecna ©   (2004-10-18 09:50) [9]

Да причем тут Loaded ?
Конечно можно и им обойтись, но нафик нада?

поглядел как делает Дельфи 6

TSpeedButton (пример о котором я говорил раньше):

published
...
property GroupIndex: Integer read FGroupIndex write SetGroupIndex default 0;
property Down: Boolean read FDown write SetDown default False;
...

GroupIndex будет проинициализирован до Down, в Loaded ничего связанного с этим не разруливается.

ЗЫ: Не нада искать сложных решений, они сами вас найдут.


 
Reindeer Moss Eater ©   (2004-10-18 11:16) [10]

А притом здесь лоадед.

Объясняю на пальцах.
Имеем компонент в котором два паблишед свойства.
(Например "ComportNumber" и "Active")

Оба свойства, как учили в автошколе, имеют методы по записи (для реализации побочных эффектов при смене свойств)

Когда меняется свойство Active, мы в методе открываем или закрываем порт.

Когда свойство читается при загрузке из ресурса DFM, его значение то же меняется и тоже вызывается метод по записи.
Беда в том, что менять Active на True еще рано, так как не прочитано свойство "ComportNumber".

Выхода два:
1. Неправильный. Продолжать реализовывать побочные эффекты при смене свойств в методах записи чтения и управлять последовательностью хранения свойств в DFM
2. Правильный.
Побочные эффекты для взаимозависимых свойств реализовывать в переопределенном методе Loaded (когда все паблишед свойства уже прочитаны)
При этом забыв про последовательность сохранения свойств в ресурсах раз и навсегда.


 
vecna ©   (2004-10-18 11:27) [11]

2Reindeer Moss Eater
Я с вами спорить не буду, естественно вы правы, но я бы не стал вариант 1 так категорично объявлять неправильным, т.к. в VCL он используется очень и очень часто.



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

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

Наверх




Память: 0.5 MB
Время: 0.044 c
14-1098193274
MORA
2004-10-19 17:41
2004.11.07
FlashFiler - это серверная (типа) БД такая!


14-1098212687
KilkennyCat
2004-10-19 23:04
2004.11.07
Старье, но прикольно


8-1091705142
анонимный
2004-08-05 15:25
2004.11.07
как проиграть .swf?


3-1097129513
S@shka
2004-10-07 10:11
2004.11.07
Можно ли в UDF вернуть больше одного параметра???


3-1097124299
Black
2004-10-07 08:44
2004.11.07
Как осуществить переход в БД не используя DBNavigator?