1

私の Delphi 7 アプリには 2 つの TPageControls があり、それらの間に TSplitter があります。各 TPageControl には 2 つの TTabSheet があります。各 TTabSheet は TWebBrowser です。写真を手に入れましたか?

このコンポーネント配置の問題は、TWebBrowser に OnMouseMove イベントがなく、TForm の OnMouseMove イベントがこの ClientAligned コンポーネントの山の下で決してトリガーされないため、マウスの位置を追跡できないことです。

私が知る必要があるのは、常に、アプリのフォームに対するマウスの XY 位置です。IOW、マウスがいつ移動したか、いつ移動したかを知る必要があります。次の機能があります。

GetMouseLocationNow(var X, Y : Integer);

これどうやってするの?

4

1 に答える 1

1

アプリケーション全体でマウスの動きを追跡するには、WM_MOUSEMOVEメッセージを追跡する必要があります。TApplicationEventsそのためにコンポーネントを使用できます。TApplicationEventsそのため、フォームにドロップし、イベントで処理WM_MOUSEMOVEOnMessageます。下位ワード inは、カーソルの座標 (メッセージが投稿されたウィンドウに相対的) と上位ワードの座標をLParam指定します。XY

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 に答える