朋友们,请教一个问题。我在图片框中画了曲线图形,可是如何做到随鼠标在曲线上的移动显示曲线上相应点的坐标,显示的(X,Y)就在曲线的相对应的点旁?

解决方案 »

  1.   

    Private Type POINTAPI
    X As Long
    Y As Long
    End Type
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongDim z As POINTAPI
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Form_Load()
    Picture1.AutoRedraw = True
    Picture1.DrawWidth = 4
    Picture1.Scale (0, -1)-(20, 1)
    For X = 0 To Picture1.ScaleWidth Step 0.01
    Picture1.PSet (X, Sin(X)), vbRed
    Label1.BackStyle = 0
    Label1.Caption = ""
    Next
    End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    GetCursorPos z
    ret = GetDC(0)
    a = GetPixel(ret, z.X, z.Y)
    If a = 255 Then
    Label1.Left = X
    Label1.Top = Y
    Label1.Caption = Format(X, "0.00") & "," & Format(Y, "0.00")
    Else
    Text1.Text = ""
    End If
    End Sub
      

  2.   

     谢谢二楼的,代码我试了,可是label并不和点的位置保持一致啊
      

  3.   

    Option ExplicitPrivate m_LineColor As LongPrivate Sub Form_Load()
        Dim X As Long, Y As Long, h As Long
        
        Picture1.AutoRedraw = True
        Picture1.ScaleMode = vbPixels
        
        Randomize
        h = Picture1.ScaleHeight
        For X = 0 To Picture1.ScaleWidth Step 16
            Y = Rnd() * h
            Picture1.Line -(X, Y)
        Next
        m_LineColor = Picture1.Point(0, 0)
    End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Picture1.Point(X, Y) = m_LineColor Then
            Label1 = "(" & X & ", " & Y & ")"
        Else
            Label1 = vbNullString
        End If
    End Sub
      

  4.   

    二楼的代码
    Text1.Text = ""
    改为
    Label1.Caption = ""
    就OK了,我开始用Text1显示,改Label时,这句漏了,没改过来
      

  5.   

    呵呵,两位大师的代码已经够可以的了。
    看你的语气,似乎就差一点点:
    Label标签的显示内容被鼠标遮住了少许?
    这个自己凑啦:
    label1.top=Y-0.05
      

  6.   

    要么再来个:Label1.Top = Y - 0.05