注册 登录
编程论坛 VB6论坛

折线程序运行问题?

xiaozhen12 发布于 2015-04-30 20:46, 557 次点击
只有本站会员才能查看附件,请 登录

这段程序是VIUSAL BASIC串口通信及编程实例其中一章节的示例程序,
但我发现运行时折线绘制到右边界时就有问题,会出现离散的点。如下图所示
代码我看了好几遍,没发现什么问题,请哪位帮忙解答下,谢谢!
只有本站会员才能查看附件,请 登录
2 回复
#2
xzlxzlxzl2015-04-30 23:47
用下面的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
#3
xiaozhen122015-05-02 07:52
回复 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
后运行程序发现效果就不对了。
1