Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.068 c
1-1098470983
Mapa3M
2004-10-22 22:49
2004.11.07
Не дать пользователю закрыть окно


14-1098101693
Slider007
2004-10-18 16:14
2004.11.07
Очень интересный глюк 2


14-1098293957
M@D
2004-10-20 21:39
2004.11.07
D8


14-1097728339
Dmitriy O.
2004-10-14 08:32
2004.11.07
Разработка ПО сторонними организациями.


9-1089829495
volser
2004-07-14 22:24
2004.11.07
Размер текстур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский