发表于:2008-05-20 10:59:26 楼主 
我是用 MSChart 显示波形图,虽然它处理很慢,但出来的效果还可以。 因为波形可能很长,需要多屏显示(用 HScroll 控件),因此每屏的尺度要一致。所以用了固定大小的数组作数据源: '每屏显示 10K 数据 
ReDim sngValues(1 To 10240, 1 To 2) ' Mydata 从 Binary 文件中读取得到 
CopyMemory sngValues(1, 2), myData(0), m * 4 MSChart1.ChartData = sngValues 这里的问题是,最后一屏的数据 m 可能少于10K,因此后面的线会跳到 0。 我现在的对策是用最后一个点的数据填充后面的数组成员,让它拉成一条直线。但最理想的还是令后面 M + 1 到 10240 的点不显示。 请问有什么办法?谢谢。 
-------------------------------------------------------------------------------------------------------
vbscape 
发表于:2008-05-20 14:21:53 1楼 得分:50
关注一下,有个办法是最后一屏重新redim一下 
ReDim sngValues(1 To m, 1 To 2)  
但是这样的结果是跟前面的横向比例不一样了,看起来不舒服。 
最理想的还是让后面点不显示。发表于:2008-05-20 21:57:44 5楼 得分:0 
如果要做到M + 1 到 10240 的点不显示,有困难,能否设置颜色和背景色相同,这样就看不见了。 
当然,我从未用mschart画过图,只是瞎猜而已! 
 
-------------------------------------------------------------------------------------------------------
chenjl1031 发表于:2008-05-20 21:57:44 2楼 得分:50 
如果要做到M + 1 到 10240 的点不显示,有困难,能否设置颜色和背景色相同,这样就看不见了。 
当然,我从未用mschart画过图,只是瞎猜而已! 
-------------------------------------------------------------------------------------------------------
zzyong00 阿勇
发表于:2008-05-20 22:04:486楼 得分:200 
'每屏显示 10K 数据 
ReDim sngValues(1 To 10240, 1 To 2) ' Mydata 从 Binary 文件中读取得到 
CopyMemory sngValues(1, 2), myData(0), m * 4 MSChart1.ChartData = sngValues 
最后一屏时: 
dim sngValues2() 
redim sngValues2(1 to m,1 to 2) 
CopyMemory sngValues2(1, 2), sngValues(1, 2),m * 16 
MSChart1.ChartData = sngValues2 尺度最好不用使用sngValues的第一序列 发表于:2008-05-21 12:22:29 
最后一屏的数据 m 可能少于10K,因此后面的线会跳到 0。 
===================== 
啊是因为已对变体数组sngValues进行过类型初始化,哪样,sngValues从m+1到10k可能是数值类型(integer,long...) 
这样,后面的线就会跳到 0 
如果把最后一屏的数据改成一个sngValues2(1 to m,1 to 2) 这样的数组,后面就没有数据了,当然不存在跳0现象了! 
不过,X轴的标识,不要用sngValues的第一序列,即sngValues(*,1),让sngValues(*,1)全部为空即可.可以用RowLabel属性设置X轴的标识 

解决方案 »

  1.   

    能否剖析SafeArray,不用移数据,只传指针?没有试过,有时间研究研究
      

  2.   

    我看了一下这个图:  http://hi.baidu.com/privateblog/blog/item/c696d6f911968d5d242df23f.html1、我认为,数组大小还是要固定,否则每一屏的比例就不对了,看起来会很不舒服。
    2、最后一屏,网格的大小还是跟前面一样。只是网格的数量可以根据实际情况,比如波形的绘制情况,到了最后一点绘制完毕后图形终止,自动调整MsChart控件的大小, 还有HScroll控件的宽度,这样MsChart控件虽然窄了点,但比例没变,看起来还是很匀称,跟前很多屏一样。
    不知可否?
      

  3.   

    上面是第一种办法。
    第二种办法是:
    将数组sngValues(m+1 To 10240, 1 To 2),从m+1到10240的数据填充其他不能绘制的数据(非数值数据),这样VB会出错,绘制会停止,然后用on error屏蔽掉这个错误。这样也不影响各屏的图形比例。
      

  4.   

    用动态数组是可以的,按照http://hi.baidu.com/privateblog/blog/item/c696d6f911968d5d242df23f.html的例子,只要
    .Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 600
    固定,无论数组大小如何变换,图形比例不变。
      

  5.   

    www.skyrising.com/soft/cwgllw.rar 财务管理论文+源码+ppt文稿   vb+access
    www.skyrising.com/soft/rsgllw.rar 人事管理论文+源码+ppt文稿   vb+access