在我用picturebox的line画线的时候,我想在picture1的最右端画线,于是我获取picture的Picture1.Width,画线的时候Picture1.Line (w - 1, Y)-(w, y1), RGB(0, 255, 0)来画,我已经设置了picture的Picture1.AutoRedraw = False     Picture1.ScaleMode = 3 但是画的线好像超过了picture的范围,如果把w改小就可以显示出来。是不是.width
获取的值不是像素值,还是什么原因啊。

解决方案 »

  1.   

    默认单位为Twips,你可以查看Screen.TwipsPerPixelX和Screen.TwipsPerPixelY,通常它们为15,1/15远远没有到一个像素。
    建议设置Picture1.ScaleMode=vbPixels。
      

  2.   

    Picture1.ScaleMode   =   3就是设置成了Picture1.ScaleMode=vbPixels啊,呵呵。但是你说的Twips和像素的关系好像就是15倍。我转换了一下可以显示出来了,但是这样很麻烦,能不能直接得到picture1的像素值。这样好点。
      

  3.   

    所以要用ScaleMode=vbPixels,这样就不存在换算问题了。
      

  4.   

    我这样设置过了啊,可是我用.width得到的值不是像素的值,是15倍的那个值。
      

  5.   

    用ScaleWidthPrivate Sub Command1_Click()
    'Picture1.Line (Picture1.ScaleWidth - 500, 10)-(Picture1.ScaleWidth, 10), vbRed
    MsgBox "Picture1.ScaleWidth:" & CStr(Picture1.ScaleWidth) & vbCrLf & "Picture1.Width:" & CStr(Picture1.Width) & vbCrLf & "Picture1.Width:" & CStr(Picture1.Width * Screen.TwipsPerPixelX)
    End SubPrivate Sub Form_Load()
    Me.ScaleMode = 3End Sub
      

  6.   

    ScaleMode是针对控件或窗体内部的ClientArea的。
    Picture1.ScaleMode=vbPixels后,Picture1.ScaleWidth和Picture1.ScaleHeight就是以像素为单位的内部客户区的大小;但是Form1.ScaleMode=vbTwips(默认),所以Picture1.Width和Picture1.Height还是以缇为单位的(应为放在Form1的客户区上)。