发表于: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轴的标识
我是用 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轴的标识
2、最后一屏,网格的大小还是跟前面一样。只是网格的数量可以根据实际情况,比如波形的绘制情况,到了最后一点绘制完毕后图形终止,自动调整MsChart控件的大小, 还有HScroll控件的宽度,这样MsChart控件虽然窄了点,但比例没变,看起来还是很匀称,跟前很多屏一样。
不知可否?
第二种办法是:
将数组sngValues(m+1 To 10240, 1 To 2),从m+1到10240的数据填充其他不能绘制的数据(非数值数据),这样VB会出错,绘制会停止,然后用on error屏蔽掉这个错误。这样也不影响各屏的图形比例。
.Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 600
固定,无论数组大小如何变换,图形比例不变。
www.skyrising.com/soft/rsgllw.rar 人事管理论文+源码+ppt文稿 vb+access