如何获得webbrowser网页里某元素所占用的位置坐标?
比如百度那个id为su的按钮占用的位置坐标左上点的坐标--右下点的坐标
这个有办法实现吗??

解决方案 »

  1.   

    查了一下,先得到这个对象,然后访问.offsetTop, .offsetLeft, .offsetWidth, .offsetHeight四个属性.
      

  2.   

    offsetTop :
    当前对象到其上级层顶部的距离.没有到整个页面中坐标的属性吗??用style.top可以吗,貌似没返回
      

  3.   


    Private Sub Command1_Click()
        Set a = ie1.Document.getelementbyid("su")
        aax = GetPosition(a)
        aa = Split(aax, "|")
        Picture1.Width = aa(2): Picture1.Height = aa(3)
        Picture1.Move aa(0), aa(1)
    End SubPrivate Sub Form_Load()
        Me.Show
        ie1.Navigate "www.baidu.com"
    End SubFunction GetPosition(xobj) As String
        xLeft = 0: xTop = 0: GetPosition = xobj.offsetwidth & "|" & xobj.offsetheight
        While Not (xobj Is ie1.Document.body)
            xLeft = xLeft + xobj.offsetLeft
            xTop = xTop + xobj.offsetTop
            Set xobj = xobj.Parentnode
        Wend
        GetPosition = xLeft & "|" & xTop & "|" & GetPosition
    End Function结果发现不正确啊,我ie1是0,0坐标,哪里错了?
      

  4.   

    Picture1.Width = aa(2): Picture1.Height = aa(3)
      Picture1.Move aa(0), aa(1这里每个值都要乘以15,因为VB里是用缇作单位的,而你取到的是象素.
      

  5.   

    元素相对于什么的坐标?
    相对于Webbrowser?Webbrowser的父容器?还是屏幕?
    不管什么坐标,首先要取得元素(HtmlElement)在父容器(HtmlWindow或Frame)中的位置,暂时不考虑Frame/Iframe容器的情况,那种比较复杂。
    首先用HtmlElment2的getBoundingClientRect方法可以得到元素的矩形(Rect),这就得到了元素在Webbrowser的位置。
    再用ClienttoServer,可以将它在Webbrowser中的位置分别转换成元素在容器和在屏幕的位置。只是这一步你需要用一点特殊的办法得到Webbrowser的句柄。
      

  6.   


    没啥说的,完全正确!呵呵
    其实获得任何一个坐标都行,我本意当然是获得相对于web容器的相对坐标了
    用了getBoundingClientRect果然就正确了,不过我那种写法不知道错在哪,按道理也没错啊