帮忙看看piture画图问题吧!显示串口采集数据只显示数据,并没有连续的曲线?代码如下:
实现的是将串口采集回来的数据做显示,像股票大盘那样的曲线。可是出现的问题是只显示数据,并没有连续的曲线?高手们能帮我看看有什么问题吗?
Private Sub SubShow()Data1.Recordset.MoveLast '/指针移动到最后一条记录Text3.Text = Data1.Recordset.RecordCount   '/返回并显示记录个数
Num = Text3.Text
Data1.RefreshPicture1.Cls               '/清屏
Dim j As Integer
Form1.ScaleMode = 3
Picture1.DrawWidth = 1
Picture1.Scale (-0.5, 6)-(16, -0.5)           '/自定义坐标
Picture1.Line (0, 0)-(16, 0)                  '/画坐标轴
Picture1.Line (0, 0)-(0, 6)
Picture1.CurrentX = 14.5: Picture1.CurrentY = 0.3: Picture1.Print "X/秒"
Picture1.CurrentX = 0.2: Picture1.CurrentY = 5.9: Picture1.Print "Y/m3/s"
For j = 0 To 15
   Picture1.DrawStyle = 2
    Picture1.Line (j, 0)-(j, 6)
   Next j
For j = 1 To 5
   Picture1.DrawStyle = 2
   Picture1.Line (0, j)-(16, j)
   Picture1.CurrentX = -0.4: Picture1.CurrentY = j
   Picture1.Print j
Next jHScroll1.Max = Num - 15                      '/调整滚动条的大小
For x = 0 To 4
        Picture1.DrawStyle = 0
        Picture1.DrawWidth = 3
        
                     
                          
        Text2.Text = arr(0)                '/文本框显示数据
        
        Data1.Recordset.AddNew                                  '/数据存储到ACCESS数据库
        Data1.Recordset.Fields(0).Value = Mid$(Time$, 1, 8)
        Data1.Recordset.Fields(1).Value = arr(0)
        Data1.Recordset.Fields(2).Value = 0            '######调试中
        Data1.Recordset.Update
       
         q(x) = arr(0)                  '/曲线的切换
        
       
              ' Picture1.Line ((x - 1), q(x - 1))-(x, q(x))          '/画实时曲线
                Picture1.CurrentX = x - 0.5: Picture1.CurrentY = 0
               Picture1.Print Mid$(Time$, 4, 8)
               Picture1.CurrentX = 7: Picture1.CurrentY = 6
                Picture1.Print "流量实时曲线"
              Picture1.Print q(x)
        ' If x >= 1 Then
       ' End If
        
        If s = False Then
            Exit For
        End If
NextEnd Sub

解决方案 »

  1.   

    q(x) = arr(0) '<-曲线的y坐标不变,成为一条直线了        
    ' Picture1.Line ((x - 1), q(x - 1))-(x, q(x)) '<-你将画线语句注释起来,当然没有输出了
      

  2.   

    回楼上,谢谢楼上认真解答arr(0)是我实时采集回来的数据存储数组。随timer隔1s采集数据存进去而' Picture1.Line ((x - 1), q(x - 1))-(x, q(x)) '这句是我调试注释的。发帖子的时候忘了取消注释,sorry除了这些原因还有问题,估计是少了个循环。因为我显示的曲线它就只有两格曲线即一条斜线(0,0)-(1,q(x))您能不能再帮我看看呢?麻烦了
      

  3.   

    支持多曲线的历史曲线控件源码
    http://blog.csdn.net/Modest/archive/2007/07/27/1711749.aspx
      

  4.   

    你每次调用 SubShow 都会擦掉重画,虽然 arr(0) 是有变化,但是根本没有保留上次的点坐标。
    Option Explicit
    Const MAX_X As Long = 16
    Const MAX_Y As Long = 6Private arr(MAX_X) As Single
    Private arrIndex As Long '最后采样的点Private Sub SubShow()
        Dim j As Long, x As Long
        Dim q(MAX_X) As Single
        
        Picture1.Cls
        Picture1.ScaleMode = vbPixels '<-不应该是 Form1 吧,还有要用常量
        Picture1.DrawWidth = 1
        Picture1.Scale (-0.5, MAX_Y)-(MAX_X, -0.5)
        Picture1.Line (0, 0)-(MAX_X, 0)
        Picture1.Line (0, 0)-(0, MAX_Y)
        Picture1.CurrentX = 14.5: Picture1.CurrentY = 0.3: Picture1.Print "X/秒"
        Picture1.CurrentX = 0.2: Picture1.CurrentY = 5.9: Picture1.Print "Y/m3/s"
        For j = 0 To 15
            Picture1.DrawStyle = 2
            Picture1.Line (j, 0)-(j, 6)
        Next j
        For j = 1 To 5
            Picture1.DrawStyle = 2
            Picture1.Line (0, j)-(16, j)
            Picture1.CurrentX = -0.4: Picture1.CurrentY = j
            Picture1.Print j
        Next j    For x = 0 To MAX_X
            Picture1.DrawStyle = 0
            Picture1.DrawWidth = 3        '绘图时将环按采样的时间次序重排
            q(x) = arr((x + arrIndex + 1) Mod (MAX_X + 1))        If x > 0 Then
                Picture1.Line ((x - 1), q(x - 1))-(x, q(x))
            End If
            Picture1.CurrentX = x - 0.5: Picture1.CurrentY = 0
            Picture1.Print Mid$(Time$, 4, 8)
            Picture1.CurrentX = 7: Picture1.CurrentY = 6
            Picture1.Print "流量实时曲线"
            Picture1.Print q(x)
        NextEnd SubPrivate Sub Timer1_Timer()
        '采样时环形更新数据
        arrIndex = (arrIndex + 1) Mod MAX_X
        arr(arrIndex) = Rnd() * MAX_Y
        
        SubShow
    End Sub
      

  5.   

    修正一下X坐标轴和采样值的显示。
    Private Sub SubShow()
        Dim j As Long, x As Long
        Dim q(MAX_X) As Single
        Dim dtTime As Date
        
        Picture1.Cls
        Picture1.ScaleMode = vbPixels '<-不应该是 Form1 吧,还有要用常量'
        Picture1.DrawWidth = 1
        Picture1.Scale (-0.5, MAX_Y)-(MAX_X, -0.5)
        Picture1.Line (0, 0)-(MAX_X, 0)
        Picture1.Line (0, 0)-(0, MAX_Y)
        Picture1.CurrentX = 14.5: Picture1.CurrentY = 0.3: Picture1.Print "X/秒"
        Picture1.CurrentX = 0.2: Picture1.CurrentY = 5.9: Picture1.Print "Y/m^3/s"
        For j = 0 To 15
            Picture1.DrawStyle = 2
            Picture1.Line (j, 0)-(j, 6)
        Next j
        For j = 1 To 5
            Picture1.DrawStyle = 2
            Picture1.Line (0, j)-(16, j)
            Picture1.CurrentX = -0.4: Picture1.CurrentY = j
            Picture1.Print j
        Next j    dtTime = DateAdd("s", -MAX_X, Time)
        For x = 0 To MAX_X
            Picture1.DrawStyle = 0
            Picture1.DrawWidth = 3        '绘图时将环按采样的时间次序重排'
            q(x) = arr((x + arrIndex + 1) Mod (MAX_X + 1))        If x > 0 Then
                Picture1.Line ((x - 1), q(x - 1))-(x, q(x))
            End If
            Picture1.CurrentX = x - 0.5: Picture1.CurrentY = 0
            Picture1.Print Format(dtTime, "mm:ss")
            dtTime = DateAdd("s", 1, dtTime)
            Picture1.CurrentX = x - 0.5: Picture1.CurrentY = q(x) + 0.5
            Picture1.Print q(x)
        Next
        Picture1.CurrentX = 7: Picture1.CurrentY = 6
        Picture1.Print "流量实时曲线"
    End Sub
      

  6.   

    不知道楼主还在不在,如果不用VB,用Java能不能作出这样的效果呢
      

  7.   

    我最近在找这方面的源码学习,不知道LZ放不方便发给我[email protected]