当前位置:编程学习 > VB >>

鼠标移动显示点的坐标

朋友们,请教一个问题。我在图片框中画了曲线图形,可是如何做到随鼠标在曲线上的移动显示曲线上相应点的坐标,显示的(X,Y)就在曲线的相对应的点旁? --------------------编程问答-------------------- 鼠标坐标 - 曲线原点在屏幕上的坐标
--------------------编程问答--------------------
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 Long

Dim z As POINTAPI
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private 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 Sub

Private 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
--------------------编程问答--------------------  谢谢二楼的,代码我试了,可是label并不和点的位置保持一致啊
引用 2 楼 SYSSZ 的回复:
VB codePrivate 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 Long

Dim z As POINTAPI
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Form_Load()
Picture1.AutoRedraw = T…
--------------------编程问答-------------------- 我想搞简单点,就是在图片框里画了坐标轴,自己定义了刻度,而后鼠标移动,鼠标移到框里某一处,就会在鼠标处出现坐标,形式如(X,Y) --------------------编程问答-------------------- 等待朋友们的帮助! --------------------编程问答-------------------- 拿个板凳先抢个位置. --------------------编程问答-------------------- 移动LABLE的位置阿 --------------------编程问答--------------------
Option Explicit

Private m_LineColor As Long

Private 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 Sub

Private 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
--------------------编程问答-------------------- 二楼的代码
Text1.Text = ""
改为
Label1.Caption = ""
就OK了,我开始用Text1显示,改Label时,这句漏了,没改过来 --------------------编程问答-------------------- 要我的测试请贴邮箱 --------------------编程问答-------------------- ....................................... --------------------编程问答--------------------
引用 8 楼  的回复:
VB code
Option Explicit

Private m_LineColor As Long

Private Sub Form_Load()
    Dim X As Long, Y As Long, h As Long
    
    Picture1.AutoRedraw = True
    Picture1.ScaleMode = vbPixels
  ……
这个代码试了一下,可以显示坐标值,可是,如果有点、线等,鼠标在上面就显示不出了。 --------------------编程问答-------------------- 呵呵,两位易做图的代码已经够可以的了。
看你的语气,似乎就差一点点:
Label标签的显示内容被鼠标遮住了少许?
这个自己凑啦:
label1.top=Y-0.05
--------------------编程问答-------------------- 要么再来个:Label1.Top = Y - 0.05  --------------------编程问答-------------------- GetCursorPos 函数
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,