注册 登录
编程论坛 VB6论坛

萌新求助,有关图片图画实时曲线 - 最后一段线出现问题

scaxxm 发布于 2021-06-08 16:48, 1911 次点击
简单说明下,自己写了个类似串口助手的程序,然后把串口接收到的数据 在 图片框中用line显示出来。我是这样处理的:x轴规定(-60,660),我只用了(0,600) ,定时100ms,定时事件中,在图片框1先用line显示600个点数据,到了601时,把图片框1的图片放到图片框2,清空图片图1,把图片框2中的(1,600)共599单位长度的图片放回到图片框1的(0,599)共599单位长度的位置上,在图片框1的x=600的地方画上第601个数据。此后的数据都是这种方法。  测试结果是,每次最后一个数据line的时候,line画线出来瞬间后一半部分消失。。 比如,最后一段线是从(599,10)画到(600,50),线完整的画出来后瞬间,这段线后一半部分消失,前一半部分还在。。 每次最后更新的数据画线的时候都出现这种情况,我该怎么办,想了好几天了想不出来哪里有问题,实在没办法求助论坛的老师,可以帮我看下程序吗,很简单的,主要时定时事件中的代码部分,我觉得问题应该出在这个地方。。
先放定时事件中的代码:
只有本站会员才能查看附件,请 登录


程序代码:串口接收曲线显示在form4中


[此贴子已经被作者于2021-6-8 16:57编辑过]

6 回复
#2
scaxxm2021-06-08 16:50
回复 楼主 scaxxm
这是我的程序代码,曲线显示在form4中
只有本站会员才能查看附件,请 登录
#3
scaxxm2021-06-08 16:56
只有本站会员才能查看附件,请 登录
#4
cwa99582021-06-09 09:12
        Picture1.Cls
        Picture1.PaintPicture Picture2.Image, 0, 0, 599, 360, 1, 0, 599, 360
        Picture1.Line (599, LastY)-(NowX, NowY), QBColor(4)     '我这里明明在X轴的(599,600)画线了,为什么调试的时候这段线画出来后瞬间又会消失掉前一半部分?
        
你在这三句代码上设置断点,就会明白了。

 Picture1.Line (599, LastY)-(NowX, NowY), QBColor(4) 这句你想画上面的一段线,但是运行第二个定时后,lastY=nowY了,所以就不会画线了,只画了一个点。
#5
风吹过b2021-06-09 10:58
我以前也用过 PaintPicture移动折线,好多次也是出现线条断裂情况,最后才一般使用每次重画所有的线条的方法。
没时间看你的代码,如果最后没解决,建议也使用这种方法来。
#6
scaxxm2021-06-10 14:55
回复 4楼 cwa9958
谢谢,听了你的建议,我设置断点,发现是这句话执行后出现问题:picture1.PaintPicture Picture2.Image, 0, 0, 599, 360, 1, 0, 599, 360
当前循环最后一条线确实完整的画出来了,下一个定时事件的时候,执行这条语句后:picture1.PaintPicture Picture2.Image, 0, 0, 599, 360, 1, 0, 599, 360,就出现最后一条的后一半部分消失。
我猜测可能是:图片框1截图到图片框2 或者 图片框2截图回图片框1的时候,边界出问题了。也就是其他都是正常的,刚好临界的地方出现问题,导致最后一条线消失了后一半部分。
我目前修改如下:
只有本站会员才能查看附件,请 登录

我修改成了这样:Picture1.PaintPicture Picture2.Image, 0, 0, 600, 360, 1, 0, 600, 360
把截图的宽度故意改成了600,实际我只需要599就行了。
目前曲线移动效果看上去没什么问题,但是从程序代码执行结果的角度和所要达到的效果来讲(效果就是曲线移动时无缝),可能问题还是存在。。
#7
scaxxm2021-06-10 14:57
回复 5楼 风吹过b
谢谢,我目前是用了2套方案。一个用图片1和图片2截图切换的方法,一个是用600个数据的数组,每次定时事件都全部重新画所有的线。
1