我用了一个picturebox控件,想在上面画串口采集过来的曲线,当然包括坐标轴。
我在进行缩放的时候遇到问题。我每次改变
'变换坐标系
 Picture1.Scale (x1, y1)-(x2, y2)Private Sub Command1_Click(Index As Integer)If Index = 0 Then
x2 = x2 / 1.2End If
If Index = 1 Then
x2 = x2 * 1.2
End Ifcoordzoom
Drawdata_txt Timex_txt, Datacomy_txt
End Sub但是我坐标轴的刻度就不对了。
For i = x1 To x2 Step LX
 Picture1.Line (i, y2)-(i, y2 + 0.5)
            '显示时间值
            Picture1.CurrentX = i
            Picture1.CurrentY = y2 + 0.5
            Picture1.Print Format(i, "######0")
Next i本来我的小刻度线长度是0.5 但是随着scale的变化,就变得越来越短或越来越长了。
我在进行缩放时用的方法是不是压根不对啊?
因为这样很难兼容曲线和刻度。
请各位高手指点迷津。
谢谢。

解决方案 »

  1.   

    我上星期给网友写的缩放坐标系的代码:
    Private Sub Form_Load()
    Form1.Height = Form1.Width
    Form1.AutoRedraw = True '自动重绘
    Form1.DrawWidth = 2 '设定线宽
    HScroll1.Max = 10
    HScroll1.Min = 4
    HScroll1.LargeChange = 1End SubPrivate Sub HScroll1_Change()
    Dim a As Single
    Form1.Cls
    a = HScroll1.Value / 2
    Form1.Scale (-a, -a)-(a, a)   '自定义坐标系
    Line (0, -a)-(0, a), vbRed '画Y轴
    Line (-a, 0)-(a, 0), vbRed '画X轴
    For I = -a To a '画Y轴刻度
    Line (-0.1, I)-(0, I), vbRed
    If I <> 0 Then
     CurrentY = CurrentY - 0.2 '控制Y坐标
     Else
     CurrentY = CurrentY + 0.2
     End If
     CurrentX = -1 * (a / 12)
     Print (-I)  '输出Y刻度数值
    Next
    For I = -a To a '画Y轴刻度
    Line (I, 0.1)-(I, 0), vbRed
    If I <> 0 Then
     CurrentX = CurrentX - 0.2 '控制X坐标
     Else
     CurrentX = CurrentX + 0.2
     End If
     CurrentY = a / 12
     Print (I)  '输出Y刻度数值
    Next
    For I = -a To a Step 0.01
    Form1.PSet (I, Sin(I)), vbBlue
    Next
    End Sub
      

  2.   

    SYSSZ
    HScroll1.Max = 10  HScroll1.Min = 4  HScroll1.LargeChange = 1 
    这个类是怎么定义的啊
      

  3.   

    做一个刻度长度的全局量,以保持刻度不变。dim kdL 
    private sub form_load()
      kdl=0.5
    end subPrivate Sub Command1_Click(Index As Integer)
    If Index = 0 Then
    x2 = x2 / 1.2
    kdl=kdl / 1.2
    End If
    If Index = 1 Then
    x2 = x2 * 1.2
    kdl=kdl * 1.2
    End Ifcoordzoom
    Drawdata_txt Timex_txt, Datacomy_txt
    End SubFor i = x1 To x2 Step LX
     Picture1.Line (i, y2)-(i, y2 + kdl)
      '显示时间值
      Picture1.CurrentX = i
      Picture1.CurrentY = y2 + kdl
      Picture1.Print Format(i, "######0")
    Next i
      

  4.   

    猴哥,你说的方法还是不行啊,因为picture1.scale 在变化。那个KDL刻度线也还是在不断变化的