Главная страница
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.49 MB
Время: 0.063 c
1-1098351753
V l a d i m i r
2004-10-21 13:42
2004.11.07
Округление


14-1098303827
Mirror
2004-10-21 00:23
2004.11.07
А почему собственно Delphi?


1-1098469078
Grundic
2004-10-22 22:17
2004.11.07
Кодирование "без нуля" - как оптимальнее?


6-1093612437
Muchaco
2004-08-27 17:13
2004.11.07
открыть сайт в окне броузера


1-1098465298
Yr2
2004-10-22 21:14
2004.11.07
Active Directory и функция ADsGetObject