1

我的 Delphi 7 应用程序有两个 TPageControls,它们之间有一个 TSplitter。每个 TPageControl 上有两个 TTabSheets。每个 TTabSheet 是一个 TWebBrowser。有图片吗?

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

我需要知道的是鼠标在任何时候相对于应用程序的 XY 位置。IOW,我需要知道鼠标何时移动,何时移动,一个函数会:

GetMouseLocationNow(var X, Y : Integer);

我怎样才能做到这一点?

4

1 回答 1

1

要在应用程序范围内跟踪鼠标移动,您必须跟踪WM_MOUSEMOVE消息。您可以TApplicationEvents为此使用组件。所以,放下TApplicationEvents形式,并WM_MOUSEMOVEOnMessage事件中处理。低位词 inLParam指定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;
于 2013-09-12T20:53:33.323 回答