用VF3.0如何根据提供数据生成曲线图,并自动存为位图

ycp 2000-05-31 08:58:00
各位大虾,用VF3.0如何根据提供数据生成曲线图,并自动存为位图,谢谢!
...全文
250 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
w102272 2000-06-27
  • 打赏
  • 举报
回复
保存为位图的,你自己研究吧,不是很难,调个WINDOW API就行。
至于绘制统计图,我可以提供给你一个通用函数,我使用的是MSGRAPH,不过程序很长,而且我不用VFP很久了,你自行研究吧。

*function 刷新图形
* 通用的统计图形制作函数
*功能, 从一个任意指定的数据库建立统计或刷新统计图形.参数是作图数据的数据别名,统计图形数据库别名,和刷新的通用类型字段名
* 用于作图的数据库应该是一个统计结果数据库,其作图数据格式如下:
* X轴 <--------分组---------> 数据以连续的字符串传递,行间用回车分隔,列间用制表符分隔.
* TAB 字段1 字段2 字段...
* X1 (y1 y3 )
* X2 (y2 y3 )
* 用于作图的数据库只应包括字符,数组,日期,等基本类型,不应该包含备注和通用型.但是本函数可以自动容错,不处理备注和通用类型的字段数据.
* 统计图形的类型等参数保存在统计图数据库的GENERAL字段中, 追加数据不会改变其风格, 如果需要改变风格, 应使用OLE绑定控件来设置
#define 最大数据量 100
#define 统计图服务类 "msgraph.chart" && vfp 自己使用的是"msgraph.chart"类, 将来可以考虑使用其他更强大的统计图类.
#DEFINE CRLF CHR(13)+CHR(10)
#DEFINE TAB CHR(9)
lPARAMETERS _数据别名, _图形库别名,_字段名
* 检查参数, 并校核可能的错误
if parameters()!=3 .or. type('_数据别名')!='C' .or. type('_图形库别名')!='C' .or.type('_字段名')!='C'
return 'ERROR: 调用刷新统计图形方法的参数错误'
endif
_图形库别名=alltrim(_图形库别名)
_数据别名=alltrim(_数据别名)
_字段名 =alltrim(_字段名)
if !used(_数据别名)
return 'ERROR: 用于刷新统计图形的统计数据库必须以<'+_数据别名+'>的别名没有打开.'
else
if reccount(_数据别名) > 最大数据量
return 'ERROR: 用于刷新统计图形的统计数据库数据记录太多,将影响系统性能问题和最终的统计图效果.'
endif
endif
if !used(_图形库别名)
return 'ERROR: 要刷新统计图形的统计图数据库必须以<'+_图形库别名+'>的别名没有打开.'
else
local _字段计数,_字段正确,_当前字段名
_字段正确 = .f.
for _字段计数=1 to fcount(_图形库别名)
_当前字段名=_图形库别名+'.'+upper(alltrim(field(_字段计数,_图形库别名)))
if upper(alltrim(field(_字段计数,_图形库别名)))=upper(_字段名) .and. type(_当前字段名)='G'
_字段正确=.t.
exit
endif
endfor
if !_字段正确
return 'ERROR: 统计图形数据库不包含名为:<'+_字段名+'>的通用类型字段!'
endif
endif
local _sav_select
_sav_select =select()
select (_数据别名)
local cGData
cGData = ""+TAB && 第一行列头, 并将作图数据库的第一个字段作为X轴的标记,其它为数据
local _字段计数,_当前字段名,_类型
for _字段计数=2 to fcount(_数据别名)
_当前字段名=upper(alltrim(field(_字段计数,_数据别名)))
_类型=type(_当前字段名)
if _类型 $ 'CNFYLDT' && 忽略M,G类型的数据
if _字段计数<fcount(_数据别名)
cGData=cGdata + _当前字段名+TAB
else
cGData=cGdata + _当前字段名+CRLF
endif
else 'MG'
if _字段计数<fcount(_数据别名)
cGData=cGdata
else
cGData=cGdata + CRLF
endif
endif
endfor
select (_sav_select)
* 一切都正确后, 开始建立统计图形的数据,这个数据是连续字符串形式的.
local _sav_select
_sav_select =select()
select (_数据别名)
go top
do while not eof(_数据别名)
* 只处理能够转换为字符类型的数据
local _字段计数,_当前字段名,_类型,_值,_字符值
for _字段计数=1 to fcount(_数据别名)
_当前字段名=upper(alltrim(field(_字段计数,_数据别名)))
_类型=type(_当前字段名)
_值=&_当前字段名
do case
case _类型='C'
_字符值 = alltrim(_值)
case _类型='N' .OR. _类型='F' .OR. _类型='Y'
_字符值 = alltrim(str(_值))
case _类型='L'
_字符值 = alltrim(iif(_值,'1','0'))
case _类型='D'
_字符值 = alltrim(dtoc(_值))
case _类型='T'
_字符值 = alltrim(ttoc(_值))
otherwise 'M','G'
_字符值 =''
endcase
if _类型 $ 'CNFYLDT' && 忽略M,G类型的数据
if _字段计数<fcount(_数据别名)
cGData=cGdata + _字符值+TAB
else
cGData=cGdata + _字符值+CRLF
endif
else 'MG'
if _字段计数<fcount(_数据别名)
cGData=cGdata
else
cGData=cGdata + CRLF
endif
endif
endfor
skip && 处理下一行
enddo
select (_数据别名)
select (_sav_select)
* 仅刷新统计图
select (_图形库别名)
* 这一步要求使用OLE控制,但是如果发生错误,将无法控制, 程序员必须保证正确安装VFP软件.
* 如果发生OLE错误, 简单地返回不处理, 目前尚无法捕捉,也没有必要处理所有的OLE错误
local _catch_err
_catch_err = on('error')
on error donothing=1
append general (_字段名) class 统计图服务类 DATA m.cGData
on error &_catch_err
return '已经使用了'+_数据别名 +'更新了'+_图形库别名+'的'+_字段名+'字段.' && 完成,返回


* 一旦建立了统计图形, 对于VFP 5.0的统计图形, 可以使用下面的属性来动态设置统计图形的属性.
*!* #DEFINE bartype -4099
*!* #DEFINE coltype -4100
*!* #DEFINE pietype -4102
*!* this.OleBoundControl1.ControlSource = _图形库别名
*!* this.OleBoundControl1.HasLegend = .F.

*!* this.OleBoundControl1.autoformat(bartype,1)
*!* this.OleBoundControl1.autoformat(coltype,1)
*!* this.OleBoundControl1.autoformat(pietype,7)

*!* #DEFINE C_GRAPHTITLE_LOC "It's Raining Cats and Dogs!"
*!* this.OleBoundControl1.HasTitle = !this.OleBoundControl1.HasTitle
*!* IF this.OleBoundControl1.HasTitle = .T.
*!* this.OleBoundControl1.ChartTitle.Caption = C_GRAPHTITLE_LOC
*!* ENDIF


*测试本函数的例子
*!* close database
*!* set defa to c:\1
*!* use sample in 1
*!* use genparse in 2
*!* select genparse
*!* go bottom
*!* append blank
*!* messagebox(刷新图形('sample','genparse','olegraph'))
*!* set
*!* close data
*!* return
ycp 2000-06-27
  • 打赏
  • 举报
回复
请关注
ycp 2000-06-12
  • 打赏
  • 举报
回复
请关注

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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