Форум: "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.032 c