1、假设我在窗口上放了一个panel(也可能是N个),再在panel上放了一个label,我如何求出label相对窗口的top ,left呢????

解决方案 »

  1.   

    简要代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      edit1.Text:=inttostr(panel1.Top+label1.Top);
      edit2.Text:=inttostr(panel1.Left+label1.Left);
    end;
      

  2.   

    用这个吧,灵活性更高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的坐标,就可以得到这个控件在窗体口的绝对位置了。
    具体代码懒得写,你按这几个思路去试试,很简单的。