- 热门文章:
- · Visual Basic 6 逆向工程与反逆向工程 (1)
- · 在PC上通过手机发送短消息(续篇)
- · Visual Basic 6 逆向工程与反逆向工程 (2)
- · 如何在Visual Basic 6.0 中连接加密的Access数据库
- · 使用Visual Basic操纵XML文档
- · 使用VB6.0设计ActiveX DLL事件
- · VB动态调用外部函数的方法
- · 建立一个程序员自己的全国性营销网络
- · 如何编写高质量的VB代码
- · 为更新到Visual Basic.NET准备你的Visual Basic 6.0应用程序
- · 再谈在VB中调用VC++开发的DLL
- · 用VB语言编程实现JPEG数据压缩
实时曲线的绘制和保存
在VB中绘制实时曲线是比较难的,一般要应用第三方控件或是Windows API函数来完成,但是如果你对实时曲线的要求不是很高,只要能表示出当前的一般情况的话,我们可以直接应用VB提供给我们的空间来完成.
原则上讲,直接在Form里绘制曲线都是可以的,MSDN上面很多例程就是直接在Form里面绘制图形的,Form作为绘制图形的容器,不过一般应用中Form中不可避免的会有很多其他控件,所以我们选择PictureBox作为绘制曲线的容器.
实时曲线的绘制一般借助于Timer控件来完成,使用Timer控件,定期将串口或是其他仪器中监测到的数据送往PictureBox1,而曲线的绘制一般画成折线图,采用PictureBox1的Line方法绘制.具体实现如下:
1.选择需要显示的窗体Picture1,加入图片框Picture1,根据实际需要设置图片的大小并移到合适的位置,并在图片的外面画好量程----时间坐标系;然后加上Timer控件以及两个CommandButton,界面就基本设置好了.
2.建立坐标系,根据Picture1的大小和高度设置画出坐标系的X轴和Y轴:
Picture1 .ScaleMode = 1 ‘以VB的基本单位作为建立坐标轴以及绘制图形的单位;
Picture1.Refresh
Picture1.CurrentX = Picture1.ScaleLeft +100
Picture1.CurrentY = Picture1.ScaleTop
Picture1.Print Picture1.ScaleHeight - 100
Picture1.Line(Picture1.ScaleLeft+100,Picture1.ScaleTop+100)-(Picture1.ScaleLeft+100, Picture1.ScaleHeight - 100)
Picture1.CurrentX = Picture1.ScaleLeft +100
Picture1.CurrentY = Picture1.ScaleHeight
Picture1.Print “(0,0)”
Picture1.Line (Picture1.ScaleLeft + 100, Picture1.ScaleHeight - 100)-(Picture1.ScaleWidth - 100, Picture1.ScaleHeight - 100)
Picture1.CurrentX = Picture1.ScaleWidth
Picture1.CurrentY = Picture1.ScaleHeight
Picture1.Print Picture1.ScaleWidth-100
Picture1.AutoRedraw = True ‘必要时,用存储在内存中的图象进行重绘
3.绘制曲线并保存,我们这里以正弦曲线作为绘制曲线的数据来源,具体应用是可以采用由串口或其他仪器采集得到的数据.首先我们绘制一条中线,然后在Timer控件的Time事件中绘制曲线:
Picture1.Line (Picture1.ScaleLeft, CInt(Picture1.ScaleHeight / 2))-(Picture1.ScaleWidth, CInt(Picture1.ScaleHeight / 2)) ‘绘制中线
Private Sub Timer1_Timer()
Dim y1 As Integer
y1 = CInt(Sin((x - Picture1.Left) / 20 / 180 * pi) * Picture1.ScaleHeight / 2)
y1 = CInt((Picture1.ScaleHeight + 1000) / 2) - y1
Picture1.Line (x, y)-(x + 20, y1)
x = x + 20
y = y1
If x >= Picture1.ScaleWidth Then
SavePicture Picture1.Image, "c:\sin.bmp" ‘保存图画,可以根据实际需要命名图片
x = 0
y = Picture1.ScaleHeight / 2
Picture1.Cls ‘清屏重画
End If
End Sub
从上面的过程可以看出,其实对于要求不高的实时曲线的绘制还是比较简单的,在这里我采用的是清屏重画图像,如果要实现图像往左移动,图像仍然保留的效果,可以采用Windows的Bitblt函数,可以让图像每次移动一个象素或是多少个twip,具体实现可以参见<<应用VB4.0实现工业控制的实时曲线和历史曲线>>( ).
以上只是实时曲线绘制的一点简单说明,具体应用中可能需要花更多的功夫修饰图像,显示时间(可以依据上面的代码中的Picture1.Print实现),但是基本原理大同小异.
- · 用DTS实现SQL数据库的导入
- · vb实现多线程!
- · VB6 自动编译组件
- · 用vb制作ActiveX Dll中,怎么让程序连接远程机器1888端口,并且等待接收信息
- · 以Oracle为例说明如何通过ODBC将数据库中的指定表导出到MDB数据库。
- · VB的API编程精粹(一)
- · VB的API编程精粹(二)
- · 在 VB 中使用 Unicode API
- · 用VB编写COM+应用时碰到问题?
- · Crystal Report(水晶报表)的报表封装成VB的DLL
- · 使用API创建窗体(类似VC的创建过程)
- · 谈谈如何象VB IDE的Immediate一样不使用工程,可以单独执行代码片断
- · (vb)利用GetBitmapBits,SetBitmapBits加速图像处理
- · 基于VB6+ADO+ListView制作的一个数据库分页显示程序(完整原程序)
- · 基于ADO+Adodc控件+DataGrid控件制作的一个数据库编辑程序(完整原程序)
- · 基于Winsock控件制作的一个“服务器,N客户端”通讯程序(完整原程序)
- · 用VB调试串口通讯
- · 如何在VB例程中接收自定义消息
- · vb基础
- · vb基础(打印问题)
- · 用VB写高效的图像处理程序
- · 基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序)
- · 如何用VB获得Windows各类系统目录
- · 用VB实现DES加解密算法(一)--定义
- · 用vb实现DES加解密算法(二)--加密
- · 用vb实现DES加解密算法(三)--解密
- · VB实现抽象类
- · 应用数据结构(一)线性表节点的插入和删除算法
- · 用 VB 实现表单的自动提交
- · VB6开发领航(一)
- · RFC 1982 SOCKS5 说明
- · 想用就用,VB基础代码
- · 用 VB 打开任意盘(硬盘/U盘/光盘)的文件.
- · AD & ADSI入门
- · 字符串与二进制互相转化(不包含汉字)
- · smtp使用说明
- · 图形旋转
- · vb基础
