怎么实现这个效果啊(VB)

woshilazygirl 2009-08-19 12:33:59
在我的VB小程序里每一秒钟收到一个数据,我用line方法把这些点(数据)连起来成一条曲线,可是超出picturebox的我不知道怎么办。我想让超出picturebox时 让曲线自动行动起来,就像那个股票系统中的时时曲线一样,哪 位老师可否指点下啊????????????????????????
...全文
313 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshilazygirl 2009-12-26
  • 打赏
  • 举报
回复
对不起大家啊,有点意外没来给大家贴啊,感谢所有回答问题的老师们,不过的分很少,没能给大家啊。谢谢
fengfeng28 2009-09-14
  • 打赏
  • 举报
回复
这个是我用的动态作图
Private Sub Timer2_Timer()
'在声明中加入对I的声明,DIM I,作为在timer1中的参数变化
Dim c As Integer
Picture1.Cls
Picture1.Scale (-10, 11)-(160, -2)
Picture1.Line (0, 0)-(160, 0)
Dim j As Integer
For j = 0 To 10
Picture1.Line (-5, j)-(160, j)
Picture1.CurrentX = -10
Picture1.CurrentY = j + 1
Picture1.Print j * 0.1
Next
If i > 140 Then i = 140
a(i) = cos_display(0) * 10
If picture_enable_ini Then
If i < 140 Then
If i > 0 And i < 5 Then
a(0) = a(i)
a(1) = a(i)
a(2) = a(i)
a(3) = a(i)
a(4) = a(i)
ElseIf i > 5 Then
For c = 0 To i - 1
Picture1.Line (c, a(c))-(c + 1, a(c + 1)), vbRed
Next
End If
Else
For c = 0 To i - 1
Picture1.Line (c, a(c))-(c + 1, a(c + 1)), vbRed
Next
For c = 0 To i - 1
a(c) = a(c + 1)
Next
End If: End If
i = i + 1
End Sub
水猿兵团五哥 2009-09-08
  • 打赏
  • 举报
回复
哎,人啊不见咯
赵4老师 2009-09-07
  • 打赏
  • 举报
回复
顶4楼,使用MSChart控件方为正途。
mybelta2 2009-09-07
  • 打赏
  • 举报
回复
友情帮顶!
贝隆 2009-09-06
  • 打赏
  • 举报
回复
学习
Sandrer 2009-09-06
  • 打赏
  • 举报
回复
在我的想法中,画上去的东西如果表面没东西覆盖的话,就应该不会消失
那么楼主能不能想办法,把 PictureBox 的左边界往右移,右边界不动。然后整个 PictureBox 往左移到原位置,接着增加 PictureBox 的宽度。

或者先把 PictureBox 中的图象保存下来,然后重新以一定的偏移量画上去(画的时候设置起点为负数)
laoluo1997 2009-09-06
  • 打赏
  • 举报
回复
恩额外
laoluo1997 2009-09-06
  • 打赏
  • 举报
回复
哦,不会啊
嗷嗷叫的老马 2009-08-25
  • 打赏
  • 举报
回复
http://www.m5home.com/blog/article.asp?id=282

我想起我也写过一个.......居然忘了- -!
chillystar 2009-08-25
  • 打赏
  • 举报
回复
补充,第6步中i++动作前确保i<X;i=X后就不用再步进。
X、i、dxdrawbuffer变量生存周期设置为窗口生存周期,即一开始就创建。特别是dxdrawbuffer,如果是过程周期,除了频繁的释放之外,还可能会产生页缓冲资源不足等不可预测的错误。
chillystar 2009-08-25
  • 打赏
  • 举报
回复
用directdraw画,代码太多了,思路吧:
1、设置变量X、i,x记录显示区的宽度,i是当前需要描绘的X轴坐标;
2、在一个单位周期内(例如0.1秒),将接收的数据存放到getdata变量;
3、将当前picturebox中显示区的内容缓冲到directxdraw的页缓冲;
3、判断:如果i=X时页缓冲向左平移一个描绘单位后执行4,否则直接执行4;
4、在页缓冲的i位置根据getdata内容绘制图形,例如LZ要画曲线图,就在(i,getdata)画点;
5、将页缓冲输出到picturebox;
6、保存getdata、i++,回到2等待下一周期(所谓回就是等待下一事件或时间被触发)。
这样做的好处就是directdraw处理速度快,通过页缓冲的更新不会造成刷屏的闪烁;无须滚动条之类,总以最适合宽度显示最新数据;但要求机器够快,能在单位周期内完成以上2-6的过程。用vb6处理,声明directdraw可能比较繁琐,如果LZ用vb.net就可直接使用。还有在vb6中最好声明多线程,用其中一个线程专门采集和保存数据,不然就可能会出现数据丢失甚至停止工作的情况发生。
我是一道光_ 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 myjian 的回复:]
http://www.m5home.com/blog/article.asp?id=282

我想起我也写过一个.......居然忘了- -!
[/Quote]

老马,你可真逗~ 一会儿楼主就晕菜啦
woshilazygirl 2009-08-24
  • 打赏
  • 举报
回复
谢谢,大家的指点。vb老鸟,的东西我看了,好像是重绘的,我也这样做过的,感觉效果不是太好,不过在看过你的后,我把我原来的程序改了下,好像已经完成了我想要的效果。谢谢
嗷嗷叫的老马 2009-08-22
  • 打赏
  • 举报
回复
11 12楼我觉得已经适合了呀.
贝隆 2009-08-22
  • 打赏
  • 举报
回复
我做过类似的,你可以把数据存在数组中,构成一个循环队列,绘制曲线即可,这样就可以形成一个滚动循环了。
熊孩子开学喽 2009-08-22
  • 打赏
  • 举报
回复
计算数值积分什么的,既然你可以直接得到数据,又何必再从图像中去计算呢?这不是自己给自己设难题么?
直接从接受到的数据去作计算不是更简单?
woshilazygirl 2009-08-21
  • 打赏
  • 举报
回复
qyaohai (中国人) 你的方法是我正在用的方法,我想问一下,里面的那张Picture是不是可以无限大啊,也就是可以不断的移支下去,内存支持吗?我用timer在画满后启动定时器,每隔一段时间就移动里面的那张picture,可是我在画图画了十分钟左右,里面的的picture就不显示 了,好像不画了一样,而且我觉得这样做也不是太好,不好去实现查询历史曲线等后续处理啊????马大哥,你也想想办法呀,是不是要跑到你的水晶屋里去你才肯动想啊(^-^).谢谢楼上的各位大蛱回答啊,期待各位帮帮出出主意啊,就要开学了啊……
咸清 2009-08-20
  • 打赏
  • 举报
回复
还有就是动态图形控件数组,一点一点拼~~
我就能想到这些了
咸清 2009-08-20
  • 打赏
  • 举报
回复
加滚动条好像相对简单吧?
加载更多回复(11)

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧