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

Вниз

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

 
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;

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


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

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


 
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 класса


 
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.


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


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



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
14-1082360010
Developerr
2004-04-19 11:33
2004.04.11
Смешанный домен Windows 2000


1-1082042322
Erik
2004-04-15 19:18
2004.04.11
Анализ структуры файла.


14-1082017092
Empleado
2004-04-15 12:18
2004.04.11
nostalgie


3-1079169631
Trap
2004-03-13 12:20
2004.04.11
Как организовать безопасность БД *.mdb


3-1081853258
Kirilll
2004-04-13 14:47
2004.04.11
Delphi+Clarion?