foxpro for graph对象全接触(2)2007-05-09数据序列在哪儿产生?数据序列产生的依据一个很关键的问题,数据系列是指:绘制在图表中的一组相关数据点。图表中的每一数据系列都具有特定的颜色或图案,并在图表的图例中进行了描述。(在一张图表中可以绘制一个或多个数据系列,但是饼图中只能有一个数据系列。)就上例数据源表来讲,我们可以指定“季度”作为数据序列产生的依据(“季度”作为图例,横轴为“年份”),也可以制定“年份”作为数据序列产生的依据(“年份”作为图例,横轴为“季度”)。但怎样实现不同的数据系列呢?我的体会是:在 Visual FoxPro 中数据系列一定产生在 Graph 数据源字符串的行上面。上例中“季度”被指定为数据序列产生的依据(“季度”作为图例,横轴为“年份”)。按照“在 Visual FoxPro 中数据系列一定产生在 Graph 数据源字符串的行上面”的理论,如果上例要指定“年份”作为数据序列产生的依据(“年份”作为图例,横轴为“季度”)就必须重新生成 Graph 数据源字符——将年份放在行上。代码如下:#DEFINE TAB CHR(9)
#DEFINE CRLF CHR(13)+CHR(10)
LOCAL CDATA
M.CDATA=""
SELECT BOE_TABLE
M.CDATA=""+TAB+"第一季度"+TAB+"第二季度"+TAB+"第三季度"+TAB+"第四季度"+CRLF
FOR I=2 TO FCOUNT("BOE_TABLE")
M.CDATA=M.CDATA+FIELD(I)+TAB
SCAN
M.CDATA=M.CDATA+ALLTR(TRANSFORM(EVAL(FIELD(I))))+TAB
ENDSCAN
M.CDATA=M.CDATA+CRLF
ENDFOR用Messagebox() 显示上面产生的 CDATA,如下:

绑定 Graph 数据源字符到 Graph 控件上以下代码用于把“Graph 数据源字符”加入一个通用型字段中,并指定该字段与“MSGRAPH.CHART”类相关联,最后把字段作为“非绑定型 ActiveX 控件”的数据源。CREATE CURSOR GRAPH(OLEGRAPH G)
APPEND BLANK
APPEND GENERAL OLEGRAPH DATA M.CDATA CLASS "MSGRAPH.CHART"
* CDATA 就是“Graph 数据源字符”
ThisForm.Graph.CONTROLSOURCE="GRAPH.OLEGRAPH" &&假定 Graph 控件是“非绑定型 ActiveX 控件”数据刷新如果控件已经与字段绑定,但我们要刷新 Graph 的数据数据源,可使用如下代码:SELECT GRAPH
ThisForm.Graph.CONTROLSOURCE=""
APPEND GENERAL OLEGRAPH DATA M.CDATA CLASS "MSGRAPH.CHART"
*替换通用字段的内容为新的 CDADA
ThisForm.Graph.CONTROLSOURCE="GRAPH.OLEGRAPH"就这么简单,我们已经知道如何生产不同数据系列的“Graph 数据源字符串”;并为 Graph 控件指定了数据源。格式化 Graph 控件到目前为止,我们已经建立了图表。下图就是没有任何修饰的图表,这是根据上例中以“季度”为数据系列生成的。不具备美感,怎么能用?

图表类型Graph 对象为我们提供了丰富多彩的图表样式,每一种图表样式都有各自的经济学意义。当然什么样的情况下用哪种样式的图表已不是本文谈论的问题。就前文例子中的情况,我们可以选用如下图表样式(当然您还可以选择其他样式):
图表类型 | 常量 | 常量值 |
簇状柱形图 | xlColumnClustered | 51 |
堆积柱形图 | xlColumnStacked | 52 |
三维堆积柱形图 | xl3DColumnStacked | 55 |
簇状柱形圆锥图 | xlConeColClustered | 99 |
我们可以通过以下代码完成图表类型的设定:#DEFINE xlColumnClustered 51
#DEFINE xlColumnStacked 52
#DEFINE xl3DColumnStacked 55
#DEFINE xlConeColClustered 99
ThisForm.Graph.charttype=xlConeColClustered图表标题参看以下代码:ThisForm.graph.HasTitle =.T.
WITH ThisForm.graph.ChartTitle
.CAPTION = "销售业绩"
.FONT.Name = "隶书"
.FONT.FontStyle = "加粗"
.FONT.Size = 16
.FONT.ColorIndex = 3
.Shadow = .T.
.Interior.ColorIndex = 19
ENDWITHX 轴和 Y 轴参看以下代码:ThisForm.graph.Axes(1).HasTitle = .T.
WITH ThisForm.graph.Axes(1)
.AxisTitle.CAPTION="年份"
WITH .AxisTitle.FONT
.Name = "隶书"
.FontStyle = "加粗"
.Size = 10
.colorindex=25
ENDWITH
WITH .TickLabels.FONT
.Name = "宋体"
.FontStyle = "加粗"
.Size = 10
ENDWITH
ENDWITH
&&以上对X轴进行格式化
ThisForm.graph.Axes(2).HasTitle = .T.
WITH ThisForm.graph.Axes(2)
.AxisTitle.CAPTION="销售额"
.AxisTitle.Orientation = -4166
WITH .AxisTitle.FONT
.Name = "隶书"
.FontStyle = "加粗"
.Size = 10
.colorindex=25
ENDWITH
WITH .TickLabels.FONT
.Name = "宋体"
.FontStyle = "加粗"
.Size = 10
ENDWITH
ENDWITH
&&以上对Y轴进行格式化图例参看以下代码:WITH ThisForm.graph.Legend
WITH .FONT
.Name = "宋体"
.FontStyle = "加粗"
.Size = 10
ENDWITH
WITH .Border
.LineStyle=-4142
ENDWITH
ENDWITHGraph 控件的格式化设置是一个内容丰富的课题,我们提到的是一些最基本的设置,不过沧海一粟而已!打印图表经常在网上看到这样的问题:怎么在 Visual FoxPro 中打印图表?人们往往将思路放在“打印表单”上,因为 VB、Delphi 中都为 Form 封装了 PrintForm 方法,不幸的是 Visual FoxPro 没有,最可气的是:自己用 API 写又太麻烦……要解决这个问题不妨换个思路。我们知道:Visual FoxPro 的报表支持对 Graph 控件的显示;运行时对 Graph 的设定都记录在与 Graph 绑定的通用性字段中。于是我们只要这么做就行了:新建一报表,在“页标头”带区中插入一“绑定型 ActiveX”控件,设置它的属性如下图:

注意“字段”中我们填入了上例中的通用性字段。 更多的资料从哪里来有两个帮助文件时必须看的,就是 Office 2000 目录下的(我的机器中是 D:Program FilesMicrosoft OfficeOffice2052)Graph9.chm 和 Vbagrp9.chm。前者是讲述 Graph 的经济意义的,后者是本文讨论 Graph 对象。由于是以 VBA 代码为程序讲解语言,所以其中会有很多常量(如:xl3DLine),Visual FoxPro 6.0 及以下版本不支持这种外部定义常量,您必须明确的告诉 Visual FoxPro 这些常量的只是什么!为了方便网友,笔者特意制作了 Graph9 的头文件(定义所有关于 Graph 9的常量),供大家下载。应用方法:编辑表单时,选“表单”菜单下“包含文件……”项,把下载的 Msgraph9.h 加入其中。

以后就可以直接使用从Vbagrp9.chm 中查到的常量了:* #DEFINE xlConeColClustered 99由于已经包含了头文件,这句就可以省了
ThisForm.Graph.charttype=xlConeColClustered附注:Visual FoxPro 7 的 Intellisense 会自动提供常量与常量值的对应关系,到那时就方便了。