标题:求助:picturebox实时曲线整体左移时部分网格线也出现左移问题?
只看楼主
mickey2028
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2017-2-13
结帖率:100%
已结贴  问题点数:20 回复次数:6 
求助:picturebox实时曲线整体左移时部分网格线也出现左移问题?
各位大侠:
  大家好!
  首先感谢大家解决了我以前的问题,特别是xzlxzlxzl美女高手,她能及时地解决我的问题。
  但小弟喜欢捣鼓,现在又发现以下问题:
  1、实时曲线整体左移时为什么部分网格线也出现左移问题?
  2、如何在里面画虚线网络线,又不影响曲线整体左移的效果?


PictureBox中曲线左平移.rar (7.08 KB)
搜索更多相关主题的帖子: 美女 如何 网络 影响 
2017-03-11 08:37
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
用下述代码覆盖你全部代码,如果有更复杂的不动背景,则需要用到PaintPicture方法的opcode参数,将动态的前景贴到不动的背景上,这样需要增加一个后台图片。
程序代码:
Dim DataFromCom As Integer '从串口读过来的实时值
Dim DataFromComLast As Integer '上次的串口值
Dim TimeCount As Integer

Private Sub Form_Load()
    
    '***********************************
    '后台仅做复制过去再复制过来的动作
    picBack.Visible = False
    
    picBack.DrawStyle = 2
    picBack.DrawWidth = 1

    PicScale picBack '调整图像框的坐标系
    PicXLine picBack
    
    picBack.DrawStyle = 0
    picBack.DrawWidth = 2
    '***********************************
    
    '***********************************
    picShow.DrawStyle = 2
    picShow.DrawWidth = 1
    
    '画图要在前台画
    PicScale picShow '调整图像框的坐标系
    PicXLine picShow
    
    picShow.DrawStyle = 0
    picShow.DrawWidth = 2
    '***********************************
    
End Sub

Private Sub PicScale(picX As PictureBox) '调整图像框的坐标系

    picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)
    
End Sub

Private Sub PicXLine(picX As PictureBox)
    
    Dim intStep As Integer
    For intStep = 0 To 10
    
        picX.Line (0, intStep * 1000)-(picX.ScaleWidth, intStep * 1000), vbBlack
        
        picX.Line (0, -intStep * 1000)-(picX.ScaleWidth, -intStep * 1000), vbBlack  '用黑线清除原来的线
        
    Next
    picShow.DrawStyle = 2
    picShow.DrawWidth = 1
    
    For intStep = 0 To 10
    
        picX.Line (0, intStep * 1000)-(picX.ScaleWidth, intStep * 1000), vbWhite
        
        picX.Line (0, -intStep * 1000)-(picX.ScaleWidth, -intStep * 1000), vbWhite
        
    Next
     picShow.DrawStyle = 0
    picShow.DrawWidth = 2
   
End Sub

Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

    picX.Line ((TimeCountX - 1) * 60, DataFromComLastX)-(TimeCountX * 60, DataFromComX), vbGreen
    
End Sub

Private Sub Timer_Timer()

    DataFromComLast = DataFromCom

    Randomize
    DataFromCom = CInt(1000 * Rnd)

    TimeCount = TimeCount + 1
    
    '对出边界的判断要提前,另15缇=1像素,这样不会出现除不尽的情况
    '这主要是你调整了坐标系导致的实际图形复制只复制了上半幅,下半幅未复制到,而负数的图形是画到下半幅的。将图形拷贝起点坐标系修改如下,则无论正负均会左移
    If ((TimeCount + 1) * 60 > picBack.Width) Then
       picBack.PaintPicture picShow.Image, -60, -picShow.Height / 2, picShow.Width, picShow.Height, 0, -picShow.Height / 2, picShow.Width, picShow.Height  '从前台复制到后台
       picShow.PaintPicture picBack.Image, 0, -picShow.Height / 2, picShow.Width, picShow.Height, 0, -picShow.Height / 2, picBack.Width, picBack.Height '从后台显示到前台是立即进行的
       TimeCount = TimeCount - 1
    End If

    DrawRealLine picShow, TimeCount, DataFromCom, DataFromComLast 'OK
    PicXLine picShow  '重画栅格线
    
End Sub

2017-03-11 13:30
mickey2028
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2017-2-13
得分:0 
回复 2楼 xzlxzlxzl
美女高手:你好!
  你能在周末休息的时间内给我快速解决问题,在此表示非常地感谢。
  但用了你修改的代码我又发现了以下几个问题:
  1、当实时数据为一个定值时,实时曲线就不能画线了(显示)?
  2、实时曲线整体平移的区域范围有限,比如说在-25℃至25℃内可以平移,超过25℃就不行了?我在代码中用40℃测试就不行。

PictureBox中曲线左平移.rar (7.26 KB)
2017-03-11 18:23
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
修改较多,直接上工程文件,内附一个我简单的曲线左移工程,在不需要效率的情况下可用那种方式解决。
曲线左平移.rar (9.03 KB)
2017-03-11 23:42
mickey2028
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2017-2-13
得分:0 
回复 4楼 xzlxzlxzl
美女高手:你好!
  昨晚这么晚了还帮我修改代码,确实非常地感谢!!
  直接用你的工程基本上可以解决我的问题了,但我想在里面画虚线网格线,我修改了部分代码,网格线只能画出一半,不知为什么?
  还请麻烦你看看??

曲线左平移.rar (6.16 KB)
2017-03-12 11:43
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:20 
已经修改坐标系了,坐标原点在图片左边缘中间,所以要画全竖线,y坐标应该是从picX.ScaleHeight / 2到-picX.ScaleHeight / 2,画竖线正确代码如下:
  For intStep = 1 To 10
    picX.Line (intStep * dd, picX.ScaleHeight / 2)-(intStep * dd, -picX.ScaleHeight / 2), vbWhite
  Next
2017-03-12 19:05
mickey2028
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2017-2-13
得分:0 
回复 6楼 xzlxzlxzl
太感谢了!完美解决了我的问题。
2017-03-12 20:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474952-1-1.html




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

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