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

Вниз

Вопрос Про TComponent   Найти похожие ветки 

 
Демонов Е.В. ©   (2002-09-25 14:13) [0]

каким образом можно в обьекте происходящем непостредственно от класса TComponent чей OWNER=FOMR1 узнать что изменился FONT у FORM1, если я перехватываю оконную процедуру Функцией SetWindowLong ?


 
REA   (2002-09-25 16:10) [1]

У Font есть событие OnChange. Его и перехвати.


 
Демонов Е.В. ©   (2002-09-25 16:41) [2]

>>REA
А каким Образом ?
пример бы, кратенький


 
REA   (2002-09-25 16:58) [3]

TForm(Component.Owner).Font.OnChange := MyChangeEventHandler;


 
Демонов Е.В. ©   (2002-09-25 17:09) [4]

Ну А Старый Font.OnChange куда девать.
Скажешь Запускать в новом, - не это не выход у меня этих наследников TComponent на форме может быть несколько.


 
Юрий Зотов ©   (2002-09-25 17:13) [5]

Посмотрите в модуле Controls сообщения CM_FONTCHANGED, CM_PARENTFONTCHANGED, для чего, как, кем и кому посылаются и т.д.


 
Демонов Е.В. ©   (2002-09-25 17:16) [6]

Так они посылаются, по моему
Fro i:=0 to ControlsCount-1
do
Control[i].Perform(CM_FONTCHANGED);

А У Меня Предок TComponent.
как Тогда


 
Юрий Зотов ©   (2002-09-25 17:19) [7]

Вы же перехватили оконную процедуру.


 
Демонов Е.В. ©   (2002-09-25 17:20) [8]

А разве туда посылаются сообщения CM_FONTCHANGED, CM_PARENTFONTCHANGED? Помоему нет.


 
Юрий Зотов ©   (2002-09-25 17:27) [9]

Если Perform, то нет. См. свойство WindowProc.


 
qube ©   (2002-09-25 17:27) [10]

function TControl.Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
var
Message: TMessage;
begin
Message.Msg := Msg;
Message.WParam := WParam;
Message.LParam := LParam;
Message.Result := 0;
if Self <> nil then WindowProc(Message);
Result := Message.Result;
end;


 
Демонов Е.В. ©   (2002-09-25 17:28) [11]

CM_FONTCHANGED, CM_PARENTFONTCHANGED - Это Внутринние Сообщения компонентов VCL , так что оконная процедура их не ловит.


 
Демонов Е.В. ©   (2002-09-25 17:29) [12]

Ну Не то это , Я Же ловлю оконную процедуру функцией API SetWindowLong - А Туда Сообщения CM_FONTCHANGED, CM_PARENTFONTCHANGED Не попадают.


 
Юрий Зотов ©   (2002-09-25 17:31) [13]

Повторяю:
Если Perform, то нет. См. свойство WindowProc.

Только Вы сначала посмотрите, а потом отвечайте, ладно?


 
Демонов Е.В. ©   (2002-09-25 17:35) [14]

А мне смотреть некуда - я на работе а тут DElphi нет.
А использую я SetWindowLong(handle,GWL_WNDProc, ) , а про свойство WindowProc я знаю но задача такая как при SetWindowLong(handle,GWL_WNDProc, ) поймать изменения Font у Окна заданного Handle.

И Что Значит
Если Perform, то нет.
Что нет то.?



 
Юрий Зотов ©   (2002-09-25 17:43) [15]

Если сообщение CM_xxx идет через Perform, то к Вам оно не попадет. Но переопределив WindowProc, Вы поймаете все.


 
Старый паскалист   (2002-09-25 17:51) [16]

По умолчанию в Дельфях оконая ф-я имеет вид:
(пропущенная сквозь MakeObjectInstance, конечно)

procedure TWinControl.MainWndProc(var Message: TMessage);
begin
try
try
WindowProc(Message);
// property WindowProc: TWndMethod read FWindowProc write FWindowProc;

finally
FreeDeviceContexts;
FreeMemoryContexts;
end;
except
Application.HandleException(Self);
end;
end;

Соответственно, Дельфи считает, что оконная ф-я всегда
вызывает WindowProc (св-во процедурного типа), и в случае
с Perform направляет сообщение не в оконную процедуру, а прямо в WindowProc.

Когда ты устанавливаешь оконную процедуру через SetWindowLong,
ты рассогласовываешь реальность с представлениями Дельфи,
и у тебя получаются две оконные ф-и - та, которую видит Виндовс (указатель на к-рую хранится в оконной структуре), и та, которую видит Дельфи - св-во WindowProc, хранящееся в компоненте.

Поэтому вместо установки новой ок.ф-и через
SetWindowLong тебе лучше изменить св-во WindowProc,
к-рое специально для этих целей и предназначено.


 
Демонов Е.В. ©   (2002-09-26 18:23) [17]

>>Старый паскалист
Очень даже всё толково обяснил.

Спасибо.:-)



Страницы: 1 вся ветка

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-21086
Sergey V. Shadrin
2002-09-25 08:08
2002.10.07
найти файл.


4-21350
dumb
2002-08-15 09:41
2002.10.07
Определение загрузки сети


4-21341
PaRL
2002-08-13 19:50
2002.10.07
Перетаскивание формы


8-21153
MJH
2002-06-07 08:08
2002.10.07
IMediaDet & ASF


3-20890
cutter-pro
2002-09-16 15:57
2002.10.07
Заставь дурака богу молиться он и лоб себе расшебет