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

Вниз

Как в WndProc обработать сообщения от конролов с формы?   Найти похожие ветки 

 
BillyJeans ©   (2004-03-12 12:18) [0]

Как в WndProc обработать сообщения от конролов, расположенных на форме? Задача стоит в том, чтобы поймать сообщение WM_MOUSEMOVE, от кнопки...


 
BillyJeans ©   (2004-03-12 12:18) [0]

Как в WndProc обработать сообщения от конролов, расположенных на форме? Задача стоит в том, чтобы поймать сообщение WM_MOUSEMOVE, от кнопки...


 
NAlexey ©   (2004-03-12 14:52) [1]

Обыкновенно.
case Message of
 WM_MOUSEMOVE:
 begin
 
 end;
end;

А в чем трудности то?


 
NAlexey ©   (2004-03-12 14:52) [1]

Обыкновенно.
case Message of
 WM_MOUSEMOVE:
 begin
 
 end;
end;

А в чем трудности то?


 
Asdor ©   (2004-03-12 15:15) [2]

2 NAlexey
Я думаю, трудности в том, что сообщение WM_MOUSEMOVE посылается контролу, а не форме, на которой он лежит... И обрабатываются они в WndProc контрола...
Видимо поймать сообщение на форме просто так не получится.


 
Asdor ©   (2004-03-12 15:15) [2]

2 NAlexey
Я думаю, трудности в том, что сообщение WM_MOUSEMOVE посылается контролу, а не форме, на которой он лежит... И обрабатываются они в WndProc контрола...
Видимо поймать сообщение на форме просто так не получится.


 
NAlexey ©   (2004-03-12 15:18) [3]

Обрабатывай Application.OnMessage, если тебя интересует конкретно WM_MOUSEMOVE. Потому как некоторые WM_ туда не попадают.


 
NAlexey ©   (2004-03-12 15:18) [3]

Обрабатывай Application.OnMessage, если тебя интересует конкретно WM_MOUSEMOVE. Потому как некоторые WM_ туда не попадают.


 
Игорь Шевченко ©   (2004-03-12 15:26) [4]

type
 THSControlMessagePumpHook = class
 private
   FControl : TControl;
   FOldWndProc : TWndMethod;
   procedure HookWndProc (var Message : TMessage);
 public
   constructor Create (AControl : TControl);
 end;

constructor THSControlMessagePumpHook.Create(AControl: TControl);
begin
 FControl := AControl;
 FOldWndProc := FControl.WindowProc;
 FControl.WindowProc := HookWndProc;
end;

procedure THSControlMessagePumpHook.HookWndProc(var Message: TMessage);
begin
 if Assigned(FControl) and (FControl is TWinControl) and
    TWinControl(FControl).HandleAllocated then
  ... проверка сообщения и делание своих дел ...
 FOldWndProc(Message); // Вызов оригинальной процедуры Control"а
end;


В методе .loaded формы (вроде, подходящее место)
можно сказать
MyHook := THSControlMessagePumpHook.Create(Button1);

После этого все сообщения, приходящие контролу будут проходить через HookProc класса


 
Игорь Шевченко ©   (2004-03-12 15:26) [4]

type
 THSControlMessagePumpHook = class
 private
   FControl : TControl;
   FOldWndProc : TWndMethod;
   procedure HookWndProc (var Message : TMessage);
 public
   constructor Create (AControl : TControl);
 end;

constructor THSControlMessagePumpHook.Create(AControl: TControl);
begin
 FControl := AControl;
 FOldWndProc := FControl.WindowProc;
 FControl.WindowProc := HookWndProc;
end;

procedure THSControlMessagePumpHook.HookWndProc(var Message: TMessage);
begin
 if Assigned(FControl) and (FControl is TWinControl) and
    TWinControl(FControl).HandleAllocated then
  ... проверка сообщения и делание своих дел ...
 FOldWndProc(Message); // Вызов оригинальной процедуры Control"а
end;


В методе .loaded формы (вроде, подходящее место)
можно сказать
MyHook := THSControlMessagePumpHook.Create(Button1);

После этого все сообщения, приходящие контролу будут проходить через HookProc класса


 
Diamond Cat ©   (2004-03-12 16:14) [5]

Игорь, это конечно круто но все же не проще ли таки переопределение appliction.onmessage и классов не надо новых городить. И если уж на то пошло, то еще можно посоветовать переопределить wndproc компонента с помощью setwindowlong. Не понятно твое стремление усложнить задачу.  :о)


 
Diamond Cat ©   (2004-03-12 16:14) [5]

Игорь, это конечно круто но все же не проще ли таки переопределение appliction.onmessage и классов не надо новых городить. И если уж на то пошло, то еще можно посоветовать переопределить wndproc компонента с помощью setwindowlong. Не понятно твое стремление усложнить задачу.  :о)


 
Игорь Шевченко ©   (2004-03-12 16:30) [6]

Diamond Cat ©   (12.03.04 16:14)

Дело не в крутизне. Что под руку попалось, то и дал.

Описанный перехватчик ловит все сообщения, как поставленные в очередь, так посланные по SendMessage и вызванные методом Perform.


 
Игорь Шевченко ©   (2004-03-12 16:30) [6]

Diamond Cat ©   (12.03.04 16:14)

Дело не в крутизне. Что под руку попалось, то и дал.

Описанный перехватчик ловит все сообщения, как поставленные в очередь, так посланные по SendMessage и вызванные методом Perform.


 
Diamond Cat ©   (2004-03-12 16:33) [7]


> Игорь Шевченко ©   (12.03.04 16:30) [6]
> Diamond Cat ©   (12.03.04 16:14)
>
> Дело не в крутизне
про крутизну было просто так ляпнуто (для связки слов) просто я удивился, обычно твои ответы звучат довольно точно (кроме тех случаев когда ты не посылаешь всех читать книги), а тут такой растрел мухи из крупнокалиберного оружия. :о)


 
Diamond Cat ©   (2004-03-12 16:33) [7]


> Игорь Шевченко ©   (12.03.04 16:30) [6]
> Diamond Cat ©   (12.03.04 16:14)
>
> Дело не в крутизне
про крутизну было просто так ляпнуто (для связки слов) просто я удивился, обычно твои ответы звучат довольно точно (кроме тех случаев когда ты не посылаешь всех читать книги), а тут такой растрел мухи из крупнокалиберного оружия. :о)



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

Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
7-1079501839
Zyb
2004-03-17 08:37
2004.05.09
Запуск закрытие приложения


14-1082455892
Матлабист
2004-04-20 14:11
2004.05.09
http://delphibase.endimus.ru/


14-1082103832
juiceman
2004-04-16 12:23
2004.05.09
C++


14-1082462998
Vlad Oshin
2004-04-20 16:09
2004.05.09
Помогите скачать SP1 к IE6. Нужна ссылка на ПОЛНУЮ установку


14-1082048178
VMcL
2004-04-15 20:56
2004.05.09
Может старое, но прикольно





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский