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

Вниз

Вопрос Про 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
14-21246
Сатир
2002-09-11 13:10
2002.10.07
Заманчивое предложение


3-20885
Skywalker
2002-09-16 15:09
2002.10.07
Database Validation


1-21031
Bond
2002-09-26 17:53
2002.10.07
Спасайте, мастера! Реакция на событие Ctrl + PgUp


14-21241
RV
2002-09-12 13:16
2002.10.07
опа... Прихожу с обеда... Где ветка про праздник? че было-то?


1-21029
Ionv
2002-09-26 07:21
2002.10.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский