如何获取 TWinControl 的 X、Y 位置(相对于屏幕)

问题描述 投票:0回答:2

我试图在 TWinControl 中显示自定义提示,但我不知道如何获取它的位置。

使用位置 0,0 显示屏幕顶部(窗口外)的提示,所以我猜它一定是屏幕上控件的位置。

编辑:

我发现 TControl 属性 ClientOrigin 返回了我所期望的内容,使用 ClientOrigin.X 和 ClientOrigin.Y 是否正确?

delphi delphi-2009
2个回答
48
投票

TControl.ClientToScreen 为您提供控件内给定点的屏幕坐标。

lPoint := Panel1.ClientToScreen(Point(0,0));
Label1.Caption := Format('Screen: %d, %d', [lPoint.X, lPoint.Y]);

0
投票

如果您的 TControl 有一个或多个父级(例如 TPanel),这将为您提供相对于 TForm 的左上角点:

function TControl.GePos: TPoint;
var
  tc: TControl; 
  rp: TPoint;
begin                                 
  tc := self;
  Result.X := tc.Left;
  Result.Y := tc.top;
  while tc <> nil do
  begin
    tc := tc.parent;
    if (tc <> nil) and tc.HasParent then    
    begin
      Inc(Result.X, tc.Left);
      Inc(Result.Y, tc.top);
    end
    else
      break;
  end;
end;
© www.soinside.com 2019 - 2024. All rights reserved.