动态统计图在VFP中的实现
一个好的数据库应用系统中,形象、直观、易懂的统计图形是必不可少的,但现有的几种方法都不太理想。VFP3.0提供了图形向导,用户可以按照向导的提示逐步操作,最终获得图形。但这种方法在实际中并不适用,因为由此得出的图形是静态的,而且用户关心的只是能否按所给数据得出图形,而不愿看到太多的中间操作步骤。Gengraph程序中的Updategrph过程可以用来实现统计图数据更新,但这种方法只适用于Foxpro
for Windows
2.5(2.6),在VFP3.0中Gengraph对Updategrph过程不再支持。DDE
也可用来实现VFP与EXCEL等具备作图能力的应用程序间的通讯,从而达到作图的目的,但这种方法实现起来较为复杂。笔者通过查阅Micro
soft公司的技术开发文档,找到了两种比较简单实用的出图方法。
一、利用EXCEL
首先生成EXCEL APPLICATION OLE对象,然后用EXCEL内嵌的VBA对其进行操作,达到出图的效果。运用这种方法的前提是机器中应装有E
XCEL。
程序如下:
*利用EXCEL和VBA做动态统计图
*创建EXCEL对象
oleapp=CreateObject(‘excel.application’)
*添加工作簿
oleapp.WorkBooks.Add
*给各单元格赋值(也可将表中的数据以数组形式注入到各单元格 )
oleapp.Cells(1,1).value=‘departa’
oleapp.Cells(2,1).value=‘departb’
oleapp.Cells(3,1).value=‘departc’
oleapp.Cells(1,2).value=100
oleapp.Cells(2,2).value=200
oleapp.Cells(3,2).value=300
*选定数据
oleapp.Range(‘a1:b3’).Select
*添加统计图
oleapp.Charts.Add
*使EXCEL可见
oleapp.Visible=.t .
*打印统计图
oleapp.ActiveASheet.PrintOut
这种方法的优点是可以利用VBA直接打印出统计图,不足的是屏幕中出现了EXCEL的菜单栏。
二 利用GENGRAPH和OleBoundControl
Microsoft的技术开发文档中介绍了以编程方式使用"图形向导", 自动创建一个指定的图表,以及如何使用代码控制图表类型和标题。
DO(_Gengraph)with,.,...,动态出图。各参数的含义分别为:
parm1:指定统计图是否自动执行。用于自动出图时,此参数值应为‘autograph’。
parm2:指定图形类型。数值型(范围1-14)。各值所代表的具体类型可参见MS-GRAPH 。
parm3:指定图形子类别。数值型(范围1-3)。各值所代表类型可参见MS-GRAPH。
parm4:指定统计图的标题。字符型。
parm5:指定XY轴显示方向。逻辑型。若为.t.,说明每组的各项是按列来安排的。
parm6:指定统计图是否显示图例说明。若为.t.,则显示,否则不显示。
parm7:指定统计图的调整格式。若为.t.,则显示图形时有暗色网格作底色,若为.f. ,则显示图形时无底色。
parm8:指定存储统计图数据的文件名。Gengraph会将更新后的统计图数据保存到该文件中。
parm9:指定生成图形后是否立即显示。若为.t.,则立即显示,否则不显示更新后的统计图。
本方法就是利用Gengraph来更新统计图(不直接显示),并将更新后的数据交给OleBo undControl来显示。如下图所示: 图1
表单的数据环境中用到两个数,表testdata内含用于作图的原始数据,template为统计图数据表。二者结构见后文的说明。表单中各控件的典型属性如下:
thisform.pageframe1.page1.grid1.RecordSource=‘testdata ’thisform.pagefr
ame1.page2.oleboundcontrol1.ControlSource= ‘template.olegraph’thisform.page
frame1.page2.oleboundcont rol1.AutoActive=1
&&防止因双击图形而进入MS-GRAPH的编辑窗口
范例中,单击‘统计图’按钮,根据表格中的初始数据给出统计图。修改表格中的数据后,再单击‘统计图’按钮,会得出更新后的统计图。‘统计图’按钮clicked事件代码如下:
*清除原有的统计图数据
Select template
Zap
*选择数据,自动统计
Select testdata
Do(_Gengraph) with ‘Autograph’,3,1,‘动态统计图示例’, .t.,.t.,.t.,‘te mplate’,.t.
*更新统计图
Select template
Goto bottom
thisform.pageframe1.page2.Refresh
thisform.pageframe1.page2.Zorder(0)
几点说明:
·Gengraph将生成的统计图数据追加到template尾部,为确保显示更新后的统计图,范例中先清空template,待生成统计图后再将指针定位到最后一条记录。
·实际应用中,可通过改变parm2和parm3来改变图表类型及子类型,通过改变parm4来改变统计图标题,通过改变parm6来指定是否显示图例。
·Gengraph只对当前工作区中的数据进行处理,当不能直接对数据进行处理时,可以用SELECT命令结合有关函数取得所需统计数据,并置于一临时表中,再交Gengraph处理。
·表template和testdata的结构如下: 表1
以上两种方法在VFP3.0及Windows3.2环境下调试通过。
石家庄军械工程学院 (050003) 王俊
《计算机世界报》98年7期