マウス位置のコントロールを知るには?

VCL の場合だと、ControlAtPos() でマウス位置のコントロールを得られましたが、FireMonkey では ObjectAtPoint() を使います。

var
  Obj: IControl;
  Control: TObject;
  dMousePos: TPointF;
begin
  {$IF FireMonkeyVersion >= 17.0}
  dMousePos := Screen.MousePos;      // XE3 以降
  {$ELSE}
  dMousePos := Platform.GetMousePos; // XE2
  {$IFEND}
  Obj := IControl(ObjectAtPoint(dMousePos));
  // ウィンドウキャプションにクラス名を表示
  if Obj = nil then
    begin
      Caption := Self.ClassName;
    end
  else
    begin
      Control := Obj.GetObject;
      Caption := Control.ClassName;
    end;
end;

コードではマウスのグローバル座標からコントロールを取得しています。マウスのイベントハンドラの引数に渡されるクライアント座標を使うのであれば、ClientToScreen() で座標変換を行わなくてはなりません。また、HitTest プロパティが False のコントロールは取得できません。

※ Platform 変数は XE3 (FM2) 以降では使えません。

See Also:


 BACK