| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:折线程序运行问题?
只看楼主 加入收藏
xiaozhen12
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-1-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
折线程序运行问题?
第7章_数据实时曲线的绘制与滚动显示_无背景图滚动显示.rar (11.11 KB)

这段程序是VIUSAL BASIC串口通信及编程实例其中一章节的示例程序,
但我发现运行时折线绘制到右边界时就有问题,会出现离散的点。如下图所示
代码我看了好几遍,没发现什么问题,请哪位帮忙解答下,谢谢!
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 通信 
2015-04-30 20:46
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:20 
用下面的TmrTriger_Timer事件代码替换你的即可,主要是画太满和消点不干净造成的

程序代码:
Private Sub TmrTriger_Timer()
   dateNowTime = Now()  '记录当前时刻
   longSecond = DateDiff("s", dateStartTime, dateNowTime) - 1   '计算当前时刻与计数开始时刻的时间差(秒)
                                
   cy = 0.1 * Pic1.ScaleHeight + Rnd * 0.8 * Pic1.ScaleHeight   '计算当前时刻在图中对应像素的横坐标x值

   If longSecond <= intNum Then
     cx = intInterval * longSecond        '计算当前时刻对应图中像素的横坐标x值
     If longSecond = 0 Then
       Pic1.PSet (cx, cy), Pic1.ForeColor '以前景色画第一个点
     End If
     
     If longSecond > 0 Then
       Pic1.Line (lx, ly)-(cx, cy), Pic1.ForeColor '以前景色将当前点与上一点连在一起
     End If
     
     
     If longSecond = intNum - 1 Then
      llx = cx                                 '将当前点保存为上二点,用于重画后更新
      lly = cy
     End If
     
   Else
     
     BitBlt Pic1.hDC, Pic1.ScaleLeft, Pic1.ScaleTop, Pic1.ScaleWidth - intInterval, Pic1.ScaleHeight, Pic1.hDC, intInterval, 0, &HCC0020 '将窗口右端部分区域拷贝至左端,右端用于重画区
       
     Pic1.Line (Pic1.ScaleWidth - intInterval, 0)-(Pic1.ScaleWidth, Pic1.ScaleHeight), Pic1.BackColor, BF
     Pic1.Line (Pic1.ScaleWidth - intInterval, ly)-(Pic1.ScaleWidth - 1, cy), Pic1.ForeColor
     Pic1.Refresh                           '更新显示窗口
     llx = Pic1.ScaleWidth - intInterval    '设置上二点X值坐标
     lly = ly                      '设置上二点Y值坐标
   End If
     If longSecond <= intNum Then  '如果时间秒数低于窗口显示上限值,则将像素当前X、Y值赋给上一点
        lx = cx
        ly = cy
     Else
        ly = cy    '如果时间秒数高于窗口显示上限值,则只将像素当前Y值赋给上一点
     End If

 
End Sub
2015-04-30 23:47
xiaozhen12
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-1-16
收藏
得分:0 
回复 2楼 xzlxzlxzl
谢谢版主,我觉的原程序逻辑应该没什么问题,曲线的消隐及重画,可就为什么会消点不完全呢?
另外,我把你更改的一句程序Pic1.Line (Pic1.ScaleWidth - intInterval, ly)-(Pic1.ScaleWidth - 1, cy), Pic1.ForeColor
更改成Pic1.Line (Pic1.ScaleWidth - intInterval, ly)-(Pic1.ScaleWidth, cy), Pic1.ForeColor
后运行程序发现效果就不对了。
2015-05-02 07:52
快速回复:折线程序运行问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034559 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved