Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизЗадам Вопрос Иначе - Как Упорядочить присвоение Свойствам Найти похожие ветки
← →
Демонов Е.В. (2002-09-11 13:47) [0]FActive:Boolean;
procedure SetActive(VAlue:Boolean);
FWinControl:TWinControl;
Property Active:Boolean read FActive Write SetActive;
Property WinControl:TWinControl read FWinControl set FWinControl;
procedure fff.SetActive(VAlue:Boolean);
begin
if assigned(FWinControl) then
begin
ФункцияWinApi(FWinControl.Handle,......)
fActive:=VAlue;
end
else
fActive:=False;
end;
Но программа сначало читает из дфм значение свойства проперти, когда ещё FWinControl=nil, а уж потом свойство WinControl
В Итоге всё работает не так как задуманно;
Как мне сделать чтобы сначало читалось свойство WinControl, а потом Active?
кстати может есть способ програмно читать свойство из дфм,
тогда и ComponentState можно Использовать
← →
Демонов Е.В. (2002-09-11 13:54) [1]имел в виду
Property WinControl:TWinControl read FWinControl Write WinControl;
Ну Где Же Вы : Ученик, Старый Паскалист ?
← →
Демонов Е.В. (2002-09-11 14:07) [2]Кто нибудь ответьте!!!!!!!!!!!!!!!!
← →
Старый Паскалист (2002-09-11 14:07) [3]Мы кушаем!!!
Используй Loaded:
procedure fff.SetActive(VAlue:Boolean);
begin
if csReading in ComponentState then
FActive := Value;
// откладываем выполнение значащего кода до Loaded;
else
IndeedSetActive(Value);
end;
procedure fff.Loaded; // override;
begin
inherited;
if FActive then IndeedSetActive(True);
//...и может быть, что-нибудь ещё.
end;
← →
SEM (2002-09-11 14:08) [4]procedure fff.SetActive(VAlue:Boolean);
begin
if assigned(FWinControl) then
begin
if not (csLoading in ComponentState) then
ФункцияWinApi(FWinControl.Handle,......)
fActive:=VAlue;
end
else
fActive:=False;
end;
procedure MyControl.Loaded;
begin
inherited;
if FActive and Assigned(FWinControl) then ФункцияAPI...
end;
← →
Демонов Е.В. (2002-09-11 14:13) [5]Спасибо, Это уже то что надо!!!!!
← →
Lord Warlock (2002-09-11 14:18) [6]По-моему, чтобы свойство не сохраняло свое значение в dfm, нужно написать так:
Property Active:Boolean read FActive Write SetActive stored False;
← →
Демонов Е.В. (2002-09-11 14:30) [7]>>Lord Warlock
Уже в десятый раз говорю, мне нужно чтобы свойство сохранялось в
dfm и что бы свойства потом читались из dfm в некотором порядке, который я хочу.
← →
Макс Черных (2002-09-11 17:01) [8]>Как мне сделать чтобы сначало читалось свойство WinControl, а >потом Active
Cвойства записываются в dfm, и соответственно потом читаются
именно в том порядке в котором они объявлены.
Так что, достаточно просто поменять местами Active и WinControl:
Property WinControl:TWinControl read FWinControl set FWinControl;
Property Active:Boolean read FActive Write SetActive;
← →
Демонов Е.В. (2002-09-11 18:03) [9]>>Макс Черных
>>Cвойства записываются в dfm, и соответственно потом читаются
>>именно в том порядке в котором они объявлены.
>>Так что, достаточно просто поменять местами Active и WinControl
Помоему Ты Неправ
Приду Домой, проверю
← →
Макс Черных (2002-09-11 20:54) [10]>Помоему Ты Неправ
>Приду Домой, проверю
Да тут и проверять то нечего.
1. При записи в dfm TWriter просто перебирает свойства
в том порядке как они объявлены, и записывает.
2. При чтении, сначала читается наименование свойства
потом оно находится через GetPropInfo и ему присваивается
считанное значение.
Это есть азбучная истина, в чем можно убедиться посмотрев
Classes.pas
Хотелось бы обратить внимание вот на что, считается хорошим
стилем писать код так, чтобы работоспособность не зависела
от порядка следования/присвоения свойств. Хотя это удается не всегда. Как то в конференции на Borland в ответ на эту рекомендацию переспросили - а как же тогда быть с:
TTreeView = class(TCustomTreeView)
...
published
...
property OnStartDrag;
{ Items must be published after OnGetImageIndex and OnGetSelectedIndex }
property Items;
end;
Борландовцы ответили - ну, так из каждого правила есть исключения :)
← →
vuk (2002-09-11 20:59) [11]to Макс Черных:
Добавлю еще, что стоит помнить о свойствах предка...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c