简要代码如下: procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text:=inttostr(panel1.Top+label1.Top); edit2.Text:=inttostr(panel1.Left+label1.Left); end;
用这个吧,灵活性更高procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text:=inttostr(label1.parent.Top+label1.Top); edit2.Text:=inttostr(label1.parent.Left+label1.Left); end; 关键是利用了Parent属性。 如果有多层PANEL的嵌套的话,也可以利用一个循环来算出坐标 var myControl:TControl; .. myControl := Label1.Parent; While not (myControl is TForm) do Begin ..{可以可以累计坐标,X,Y} myControl := myControl.Parent; End; 当然,上面都是最笨的方法,更简单的是你利用ClientToScreen方法将坐标转化为屏幕坐标, 然后减去当前SELF的坐标,就可以得到这个控件在窗体口的绝对位置了。 具体代码懒得写,你按这几个思路去试试,很简单的。
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(panel1.Top+label1.Top);
edit2.Text:=inttostr(panel1.Left+label1.Left);
end;
begin
edit1.Text:=inttostr(label1.parent.Top+label1.Top);
edit2.Text:=inttostr(label1.parent.Left+label1.Left);
end;
关键是利用了Parent属性。
如果有多层PANEL的嵌套的话,也可以利用一个循环来算出坐标
var
myControl:TControl;
..
myControl := Label1.Parent;
While not (myControl is TForm) do
Begin
..{可以可以累计坐标,X,Y}
myControl := myControl.Parent;
End;
当然,上面都是最笨的方法,更简单的是你利用ClientToScreen方法将坐标转化为屏幕坐标,
然后减去当前SELF的坐标,就可以得到这个控件在窗体口的绝对位置了。
具体代码懒得写,你按这几个思路去试试,很简单的。