现有这样一个问题:
有这样一组坐标值A:(20,Y1);B(40,Y2);C(60,Y3);D(80,Y4)....
其中Y1,Y2,Y3,Y4数值是变化的,并定时更新,如何在PICTURE控件
里实时显示动态曲线,并且值变化,曲线同时变化,如何实现??

解决方案 »

  1.   

    新建一个工程,添加Command1和Picture1,Text(1-10)若干。
    在模块中写如下代码
    Option Explicit
    Private Type POINTAPI
    x As Long
    y As Long
    End Type
    Public Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As Any, ByVal nCount As Long) As Long
    在窗体中写如下代码
    Option Explicit
    Private Type POINTAPI
    x As Long
    y As Long
    End Type
    Private Sub Command1_Click()
    Dim Point(0 To 4) As POINTAPI
    Point(0).x = 10: Point(0).y = 10
    Point(1).x = 250: Point(1).y = 30
    Point(2).x = 166: Point(2).y = 80
    Point(3).x = 150: Point(3).y = 150
    Point(4).x = 50: Point(4).y = 200Call Polygon(Picture1.hdc, Point(0), 5)
    End Sub
    将Point(0-4).x和Point(0-4).y所有数值改成由Text.Text(1-10)输入即可。
      

  2.   

    这个代码当然并不能完全符合你的要求,  只是给你一个思路.【CBM666 的实时动态曲线图演示】1.随机数取得数据动态往左移动(经由数据库或串口取得数据可自己修改) 2.每个页面自动保存图片(可自己增加浏览图片) 下载地址: http://cbm666.com/curvrnd.exe  
     
     
      

  3.   

    LZ:
    你的消息已看到,与你提问贴内容相同。请解释清楚
    你是想动态将A:(20,Y1);B(40,Y2);C(60,Y3);D(80,Y4)四点组成曲线呢?
    还是如2楼理解的那样?
      

  4.   

    我的意思是A,B,C,D....的在横坐标上等间距位置固定,而A,B,C,D...的纵标动态变化
    如下图:
      

  5.   

    LZ:
    图片未见到,按你现在所说,你是想动态将A:(20,Y1);B(40,Y2);C(60,Y3);D(80,Y4)四点组成曲线.那比较麻烦,仅4点要画成曲线,涉及4点间插值运算.
    不如将4点数据分别处理成棒图显示,棒图动态变化来的方便.
      

  6.   

    zdingyun :你好! 如果能用棒图实时动态显示也可以,有代码相助吗?
     
      

  7.   

    在窗体上做PitBangtu(PictureBOX控件数组),放一Timer控件,Timer控件的属性Interval控制更新速度。通过全局变量record_jmm(3)传递数据,这里为显示为-100到100。
    Option Explicit
        Dim i As Integer
        Dim record_jmm(3) As Single
    Private Sub cmdExit_Click()
        End
    End SubPrivate Sub Form_Load()
        Timer1.Interval = 1000
        For i = 0 To 3
           PitBangtu(i).Height = 4235
           PitBangtu(i).Width = 1095
        Next i
    End SubPrivate Sub Timer1_Timer()
        For i = 0 To 3
           PitBangtu(i).Cls
        Next i
        PitBangtu(0).Line (0, 2117.5 - record_jmm(0) * 42.35 / 2)-(1095, 4235), vbRed, BF
        PitBangtu(1).Line (0, 2117.5 - record_jmm(1) * 42.35 / 2)-(1095, 4235), vbRed, BF
        PitBangtu(2).Line (0, 2117.5 - record_jmm(2) * 42.35 / 2)-(1095, 4235), vbRed, BF
        PitBangtu(3).Line (0, 2117.5 - record_jmm(3) * 42.35 / 2)-(1095, 4235), vbRed, BF
    End Sub
      

  8.   

    Private Sub Timer1_Timer()
    For i = 0 To 3
    PitBangtu(i).Cls
    Next i
    PicBangtu(0).Line (0, 2117.5 - record_jmm(0) * 42.35 / 2)-(1095, 4235), vbRed, BF
    PicBangtu(1).Line (0, 2117.5 - record_jmm(1) * 42.35 / 2)-(1095, 4235), vbRed, BF
    PicBangtu(2).Line (0, 2117.5 - record_jmm(2) * 42.35 / 2)-(1095, 4235), vbRed, BF
    PicBangtu(3).Line (0, 2117.5 - record_jmm(3) * 42.35 / 2)-(1095, 4235), vbRed, BF
    End Sub
      

  9.   

    Option Explicit
        Dim i As Integer
        Dim record_jmm(3) As Single
    Private Sub Form_Load()
        For i = 0 To 3
            Picture1(i).Height = 4235
            Picture1(i).Width = 1000
            Picture1(i).Top = 500
            Picture1(i).Left = i * 1500 + 500
            Picture1(i).BackColor = vbGreen
        Next
        Timer1.Interval = 1000
        record_jmm(0) = 200
        record_jmm(1) = -500
        record_jmm(3) = -50
        Me.Height = 5500
        Me.Width = 7000
    End SubPrivate Sub Timer1_Timer()
        For i = 0 To 3
            Picture1(i).Cls
        Next i
        '42.35是控制Y轴变化的倍率,-100到100。改为4.235则为-1000到1000
        Picture1(0).Line (0, 2117.5 - record_jmm(0) * 4.235 / 2)-(1095, 4235), vbRed, BF
        Picture1(1).Line (0, 2117.5 - record_jmm(1) * 4.235 / 2)-(1095, 4235), vbRed, BF
        Picture1(2).Line (0, 2117.5 - record_jmm(2) * 42.35 / 2)-(1095, 4235), vbRed, BF
        Picture1(3).Line (0, 2117.5 - record_jmm(3) * 42.35 / 2)-(1095, 4235), vbRed, BF
    End Sub
      

  10.   

    可以柱状显示!以前也成功实现过,用的是label控件实现的!
    可惜波形显示尚未实现,甚撼!