我的Delphi 7应用程序有两个TPageControl,它们之间有一个TSplitter。在每个TPageControl上有两个TTabSheets。每个TTabSheet都是一个TWebBrowser。得到了照片?
这个组件安排的问题是无法跟踪鼠标的位置,因为TWebBrowser没有OnMouseMove事件,并且TForm的OnMouseMove事件永远不会在这堆ClientAligned组件下触发。
我需要知道的是鼠标的XY位置,相对于应用程序的形式,始终。 IOW,我需要知道鼠标何时移动,以及何时移动,该函数将:
GetMouseLocationNow(var X, Y : Integer);
我该怎么做?
答案 0 :(得分:1)
要跟踪应用程序范围内的鼠标移动,您必须跟踪WM_MOUSEMOVE
消息。您可以使用TApplicationEvents
组件。因此,请在表单上删除TApplicationEvents
,然后在WM_MOUSEMOVE
事件中处理OnMessage
。 LParam
中的低位字指定光标的X
坐标(相对于邮件发布到的窗口)和高位字Y
坐标。
procedure TfrmMain.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
var
Pt: TPoint;
begin
if Msg.message = WM_MOUSEMOVE then begin
Pt := Point(WORD(Msg.lParam), HiWord(Msg.lParam));
windows.ClientToScreen(Msg.hwnd, Pt);
windows.ScreenToClient(Handle, Pt);
MouseMoved(Pt.X, Pt.Y);
end;
end;
procedure TfrmMain.MouseMoved(const AX, AY: Integer);
begin
// do the work here
end;