Главная страница
    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.49 MB
Время: 0.03 c
3-1082007252
Evgenija
2004-04-15 09:34
2004.05.09
Подсоединение к базе Оракла


1-1082446133
Talle
2004-04-20 11:28
2004.05.09
Компонента как параметр процедуры.


1-1082836866
Sanek_metaller
2004-04-25 00:01
2004.05.09
Особая форма


14-1082540052
ИМХО
2004-04-21 13:34
2004.05.09
Вопрос веб-спецам


11-1068245737
nsvi
2003-11-08 01:55
2004.05.09
Вопросы по ToolBar





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