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

Вниз

Задам Вопрос Иначе - Как Упорядочить присвоение Свойствам   Найти похожие ветки 

 
Демонов Е.В. ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-73531
shulc
2002-09-02 18:51
2002.09.23
Как оставить поле типа TDateTime пустым


1-73642
Jony
2002-09-12 14:23
2002.09.23
Как в режиме отладки посмотреть элементы массива?


1-73703
KSergey
2002-09-11 10:07
2002.09.23
Можно ли в общем случае узнать какая компонента выкинула Except?


1-73653
angus
2002-09-06 07:46
2002.09.23
form


3-73567
Bishop
2002-09-03 17:21
2002.09.23
Lookup