组件顶部的组件会阻止鼠标位置

时间:2013-09-12 20:42:45

标签: delphi

我的Delphi 7应用程序有两个TPageControl,它们之间有一个TSplitter。在每个TPageControl上有两个TTabSheets。每个TTabSheet都是一个TWebBrowser。得到了照片?

这个组件安排的问题是无法跟踪鼠标的位置,因为TWebBrowser没有OnMouseMove事件,并且TForm的OnMouseMove事件永远不会在这堆ClientAligned组件下触发。

我需要知道的是鼠标的XY位置,相对于应用程序的形式,始终。 IOW,我需要知道鼠标何时移动,以及何时移动,该函数将:

GetMouseLocationNow(var X, Y : Integer);

我该怎么做?

1 个答案:

答案 0 :(得分:1)

要跟踪应用程序范围内的鼠标移动,您必须跟踪WM_MOUSEMOVE消息。您可以使用TApplicationEvents组件。因此,请在表单上删除TApplicationEvents,然后在WM_MOUSEMOVE事件中处理OnMessageLParam中的低位字指定光标的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;