Главная страница
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.031 c
6-1079517885
Triakin
2004-03-17 13:04
2004.04.11
Какие инструменты лучше использовать для обмена инф. в сети


7-1079525450
DuchmanSoft
2004-03-17 15:10
2004.04.11
Мою программу закрывает другая программа


7-1080207035
Insert
2004-03-25 12:30
2004.04.11
Инфо о жестком диске


14-1079338777
IceBeerg
2004-03-15 11:19
2004.04.11
Help! Комп не включается


3-1081942132
Flashas
2004-04-14 15:28
2004.04.11
mozet xvatit stirat moi voprosy