foxpro for graph对象全接触(1)2007-05-09前言很多朋友可能都有这样的认识:Visual FoxPro 对 Graph 对象的支持很有限——很难使用它作出丰富、漂亮的图标;更有一些问题好像是无法逾越:打印图表—— Visual FoxPro 没有提供为表单提供打印方法、Graph 本身又没有提供打印或是保存为图片的方法……我也有这种想法,但随着“面向对象化”的程序设计观念的逐步建立以及对 COM 认识的不断加深,我改变了原先的观点。Excel 在图表方面的能力一直为人称道,大家可知:微软从来只提供过一个图表引擎,Excel 的图表功能完全由 Gpaph 对象提供的。也就是说:Excel 能做到的,在 Visual FoxPro 中就能做到——他们使用的是同一个图表引擎。在我们开始之前,我有以下建议:
- 注意了解在Visual FoxPro中使用 Graph 的一些基础性问题,例如数据源、数据刷新……
- Graph是一个内容、层次很丰富的对象,我们不可能讲述太多的方法和属性(这也没什么意思),更多的知识可以参考Graph对象的帮助文件。
Visual FoxPro 怎样对 Graph 对象支持Graph 对象的构成

从图中可以看到:顶层的 Application 对象下面有两个重要的子对象——Chart、DataSheet。DataSheet 对象控制着生成图表的数据,理论上讲变动它的内容就可以得到图表的数据刷新功能;Chart 对象控制图表的各种形态,也就是格式的控制。可见:用好 Graph 就必须(只要)用好这两个对象就可以了。从功能的需求上来讲,应用 Graph 不外乎数据源的控制和格式的控制。Visual FoxPro 怎样对 Graph 对象支持然而事情没有这样简单,在Visual FoxPro中加入Graph对象时,我们建立的是 Graph 对象的实例,而不是上面提到的Application对象的实例。我们可以通过如下语句观察 Graph 上层的 Application 对象:?Thisform.graph.application.name
*返回:Microsoft Visual FoxPro这样一来,我们就无法通过 Appliction 对象得到 DataSheet 对象来控制数据源了。更明确的讲:我们只能通过 Graph 对象实例控制格式而无法完成数据的控制。(在 Excel 中的情形也是一样,只不过上层的 Application 对象换成了 Excel。)不要着急,Visual FoxPro 自有解决之道。Visual FoxPro 对 Graph 的数据源的控制是通过“让 Graph 控件绑定到通用字段上”来实现的,我们只要不断地变更通用字段的内容,就能方便地控制图表的数据源。光有数据不行,对格式的控制我们就可以使用 Graph 对象的属性来控制,写一些代码您的图表就“美仑美奂”了。这里要说明的是,对图表格式的控制也会写入那个通用性字段中。有人要问了:可不可以在往通用字段中写入数据的时候,把格式一并写入?我想:这是可以的,但有谁这样做过,有谁放着容易使用的方法而舍近求远?Graph 的数据源与数据更新指定 Graph 数据源字符串例如有数据表结构及数据如下,表示1996-1998年各季度的销售情况。(数据表为
quarter | year1996 | year1997 | year1998 |
第一季度 | 730.1 | 929 | 1693.97 |
第二季度 | 782.2 | 1361.1 | 2042.98 |
第三季度 | 908 | 1485.2 | 2462.44 |
第四季度 | 736.3 | 1254.7 | 2800 |
我们先使用制表符号把数据表转化为一个符合 Graph 要求的字符串。这个代码如下:(数据来自BOE_TABLE.DBF)#DEFINE TAB CHR(9)
#DEFINE CRLF CHR(13)+CHR(10)
LOCAL CDATA
M.CDATA=""
SELECT BOE_TABLE && 选中数据源表
M.CDATA=""+TAB+"1996"+TAB+"1997"+TAB+"1998"+CRLF
SCAN ALL
M.CDATA=M.CDATA+QUARTER+TAB+ALLTR(STR(YEAR1996,7,2));
+TAB+ALLTR(STR(YEAR1997,7,2))+TAB+ALLTR(STR(YEAR1998,7,2))+CRLF
ENDSCAN如果显示这个字符串,您会发现它的形态就象一个表格。如下,用 Messagebox() 显示上面产生的 CDATA。为了讲解方便,我们把这个字符串称为:Graph 数据源字符串。