帮忙看看piture画图有关问题吧!显示串口采集数据,可最后只能显示数据,并不能显示没有连续的曲线
帮忙看看piture画图问题吧!显示串口采集数据,可最后只能显示数据,并不能显示没有连续的曲线
帮忙看看piture画图问题吧!显示串口采集数据只显示数据,并没有连续的曲线?
代码如下:
实现的是将串口采集回来的数据做显示,像股票大盘那样的曲线。可是出现的问题是只显示数据,并没有连续的曲线?
高手们能帮我看看有什么问题吗?
Private Sub SubShow()
Data1.Recordset.MoveLast '/指针移动到最后一条记录
Text3.Text = Data1.Recordset.RecordCount '/返回并显示记录个数
Num = Text3.Text
Data1.Refresh
Picture1.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 j
HScroll1.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
Next
End Sub
------解决方案--------------------
支持多曲线的历史曲线控件源码
http://blog.****.net/Modest/archive/2007/07/27/1711749.aspx
------解决方案--------------------
你每次调用 SubShow 都会擦掉重画,虽然 arr(0) 是有变化,但是根本没有保留上次的点坐标。
帮忙看看piture画图问题吧!显示串口采集数据只显示数据,并没有连续的曲线?
代码如下:
实现的是将串口采集回来的数据做显示,像股票大盘那样的曲线。可是出现的问题是只显示数据,并没有连续的曲线?
高手们能帮我看看有什么问题吗?
Private Sub SubShow()
Data1.Recordset.MoveLast '/指针移动到最后一条记录
Text3.Text = Data1.Recordset.RecordCount '/返回并显示记录个数
Num = Text3.Text
Data1.Refresh
Picture1.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 j
HScroll1.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
Next
End Sub
------解决方案--------------------
支持多曲线的历史曲线控件源码
http://blog.****.net/Modest/archive/2007/07/27/1711749.aspx
------解决方案--------------------
你每次调用 SubShow 都会擦掉重画,虽然 arr(0) 是有变化,但是根本没有保留上次的点坐标。
- VB code
Option Explicit Const MAX_X As Long = 16 Const MAX_Y As Long = 6 Private 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) Next End Sub Private Sub Timer1_Timer() '采样时环形更新数据 arrIndex = (arrIndex + 1) Mod MAX_X arr(arrIndex) = Rnd() * MAX_Y SubShow End Sub