大家有谁用VB做过实时显示的数据曲线的呢?

qq_34941178 2016-05-30 09:43:33
要求是:可以通过滑块控件显示历史曲线;由于采样时间比较长,采样点有很多,当超出picturebox的边界时怎么办呢?
大家有现成的例子也希望可以发一下,谢谢了
...全文
2276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2018-04-09
  • 打赏
  • 举报
回复
引用 9 楼 bakw 的回复:
[quote=引用 8 楼 chewinggum 的回复:]

Option Explicit
Const DataDisplayCount = 100 '看你想要显示多少个数据
Dim data As New Collection


Private Sub Form_Load()
    Dim i As Integer
   '数据初始化
    For i = 1 To DataDisplayCount
        data.Add 0
    Next
    '开启timer模拟数据输入
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    '模拟数据获取到的时候的处理
    Dim i As Integer
    Dim X As Long, Y As Long
    Dim lastX As Long, lastY As Long
    
    data.Add Rnd  '模拟随机获取到一个数值,这里产生一个0~1的数,用来标书数据点Y坐标占picture高度的百分比
    data.Remove 1 '把超过显示数量的数据删除
    
    '准备重绘的坐标起始点,原点在Picture的左下角。横坐标为时间,显示DataDisplayCount个数据,纵坐标为第一个点数据的Y坐标。Y坐标的算法自己去定义,我这怎么简单怎么来
    lastX = 0
    lastY = Picture1.ScaleHeight - Picture1.ScaleHeight * data(1)
    Picture1.Cls '绘图区域清空

    For i = 2 To data.Count
        X = X + Picture1.ScaleWidth / (DataDisplayCount - 1)
        Y = Picture1.ScaleHeight - Picture1.ScaleHeight * data(i)
        Picture1.Line (lastX, lastY)-(X, Y)
        lastX = X
        lastY = Y
        
    Next
End Sub

简单自绘一段。给你一个样例:一个窗体,扔一个picturebox(初始化为扁长一点)一个timer。然后黏贴上面的代码试试
坟头的草都比人高了。。。[/quote] 靠,这是谁挖出来的
笨狗先飞 2018-04-09
  • 打赏
  • 举报
回复
引用 8 楼 chewinggum 的回复:

Option Explicit
Const DataDisplayCount = 100 '看你想要显示多少个数据
Dim data As New Collection


Private Sub Form_Load()
    Dim i As Integer
   '数据初始化
    For i = 1 To DataDisplayCount
        data.Add 0
    Next
    '开启timer模拟数据输入
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    '模拟数据获取到的时候的处理
    Dim i As Integer
    Dim X As Long, Y As Long
    Dim lastX As Long, lastY As Long
    
    data.Add Rnd  '模拟随机获取到一个数值,这里产生一个0~1的数,用来标书数据点Y坐标占picture高度的百分比
    data.Remove 1 '把超过显示数量的数据删除
    
    '准备重绘的坐标起始点,原点在Picture的左下角。横坐标为时间,显示DataDisplayCount个数据,纵坐标为第一个点数据的Y坐标。Y坐标的算法自己去定义,我这怎么简单怎么来
    lastX = 0
    lastY = Picture1.ScaleHeight - Picture1.ScaleHeight * data(1)
    Picture1.Cls '绘图区域清空

    For i = 2 To data.Count
        X = X + Picture1.ScaleWidth / (DataDisplayCount - 1)
        Y = Picture1.ScaleHeight - Picture1.ScaleHeight * data(i)
        Picture1.Line (lastX, lastY)-(X, Y)
        lastX = X
        lastY = Y
        
    Next
End Sub

简单自绘一段。给你一个样例:一个窗体,扔一个picturebox(初始化为扁长一点)一个timer。然后黏贴上面的代码试试
坟头的草都比人高了。。。
脆皮大雪糕 2018-04-09
  • 打赏
  • 举报
回复

Option Explicit
Const DataDisplayCount = 100 '看你想要显示多少个数据
Dim data As New Collection


Private Sub Form_Load()
    Dim i As Integer
   '数据初始化
    For i = 1 To DataDisplayCount
        data.Add 0
    Next
    '开启timer模拟数据输入
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    '模拟数据获取到的时候的处理
    Dim i As Integer
    Dim X As Long, Y As Long
    Dim lastX As Long, lastY As Long
    
    data.Add Rnd  '模拟随机获取到一个数值,这里产生一个0~1的数,用来标书数据点Y坐标占picture高度的百分比
    data.Remove 1 '把超过显示数量的数据删除
    
    '准备重绘的坐标起始点,原点在Picture的左下角。横坐标为时间,显示DataDisplayCount个数据,纵坐标为第一个点数据的Y坐标。Y坐标的算法自己去定义,我这怎么简单怎么来
    lastX = 0
    lastY = Picture1.ScaleHeight - Picture1.ScaleHeight * data(1)
    Picture1.Cls '绘图区域清空

    For i = 2 To data.Count
        X = X + Picture1.ScaleWidth / (DataDisplayCount - 1)
        Y = Picture1.ScaleHeight - Picture1.ScaleHeight * data(i)
        Picture1.Line (lastX, lastY)-(X, Y)
        lastX = X
        lastY = Y
        
    Next
End Sub

简单自绘一段。给你一个样例:一个窗体,扔一个picturebox(初始化为扁长一点)一个timer。然后黏贴上面的代码试试
脆皮大雪糕 2018-04-09
  • 打赏
  • 举报
回复
数据多的话用不着保留所有数据,只要显示区域要显示的数据保留就可以了
threenewbee 2018-04-02
  • 打赏
  • 举报
回复
scrollbar+mschart,滚动以后从数据库中加载对应的历史数据。表面上看是整个图有全部的数据,实际上没有必要,滚动条滚动到哪里,加载那一段数据就可以了。
冰不孤独 2018-04-01
  • 打赏
  • 举报
回复
百度一下echart,用它来实现效果更好!
vansoft 2016-06-07
  • 打赏
  • 举报
回复
一种是滚动。比如界面上最多显示20个数据,左右滚动时,不停地变数据,但一直取20个。
赵4老师 2016-05-30
  • 打赏
  • 举报
回复
Scroll Bar 控件方案:创建可滚动的图形视口


除了 PictureBox 控件之外,也可用水平、垂直滚动条创建可滚动的图形视口应用程序。当所包含的图形超过控件范围时,单独一个 PictureBox 控件无法实现滚动功能─ 因为 PictureBox 控件不能自动添加滚动条。

应用程序使用两个图片框。称第一个为平稳的父 PictureBox 控件。称第二个为子 PictureBox 控件,它包含在父图片框中。子图片框中包含图形图象,可用滚动条控件在父图片框中移动子图片框。

图 7.25 在设计时添加滚动条控件



如图 7.28 所示,先创建一个新工程,然后在窗体上绘制两个图片框、一个水平滚动条和一个垂直滚动条。

这里,用窗体的 Form_Load 事件设置比例模型,在父图片框中调整子图片框的大小,水平、垂直滚动条将定位并调整它们的大小,然后加载位图图形。将下列代码添加到窗体的 Form_Load 事件过程中:

Private Sub Form_Load()

'设置 ScaleMode 为像素。
Form1.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels

'将 Autosize 设置为 True,以使 Picture2 的边界
'扩展到实际的位图大小。
Picture2.AutoSize = True

'将每个图片框的 BorderStyle 属性设置为 None。
Picture1.BorderStyle = 0
Picture2.BorderStyle = 0

'加载位图。
Picture2.Picture = _
LoadPicture("c:\Windows\Winlogo.bmp")

'初始化两个图片框的位置。
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0

'将水平滚动条定位。
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width

'将垂直滚动条定位。
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height

'设置滚动条的 Max 属性。
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Height

'判断子图片框是否将充满屏幕。
'若如此,则无需使用滚动条。
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)

End Sub


水平和垂直滚动条的 Change 事件用来在父图片框中上、下、左、右移动子图片框。请将下列代码添加到两个滚动条控件的 Change 事件中:

Private Sub HScroll1_Change()
Picture2.Left = -HScroll1.Value
End Sub

Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
End Sub


将子图片框的 Left 和 Top 属性分别设置成水平和垂直滚动条数值的负值,这样,当上、下、左、右滚动时,图形可正确地移动。

运行时,显示的图形如图 7.26 所示。

图 7.26 运行时滚动位图



运行时调整窗体大小
在上例中,窗体的初始大小限制图形的可视大小。在运行时当用户调整窗体大小时,为了调整图形视口应用程序的大小,可将下列代码添加到窗体的 Form_Resize 事件过程中:

Private Sub Form_Resize()
'调整窗体大小时,改变 Picture1
'的尺寸。
Picture1.Height = Form1.Height
Picture1.Width = Form1.Width

'重新初始化图片和滚动条的
'位置。
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Width

'检查是否需要滚动条。
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)

End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧