Форум: "Потрепаться";
Текущий архив: 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.48 MB
Время: 0.039 c