数据图表/报表技术
图表/报表是数据信息输出最常用的格式,在各类管理系统中具有重要的作用和地位。本章将通过数据报表设计器(Data Report Designer)、图表、直接编程打印、利用Microsoft Excel和Microsoft Word等设计多种格式的报表。这些报表格式是比较典型的报表形式,在实际开发中具有重要意义和作用。在本章中将介绍有图表/报表的知识。
27.1 图 表 技 术
在实际编程过程中,有时需要将查询统计出来的数据用以图表的形式显示出来。VB中提供了一个图表控件,使用该图表控件可以很方便地将数据以图表的形式显示统计出来。在本节中将介绍一些有关图表的知识。
27.1.1 图表控件概述
图表控件(MSChart)是可以按照一定的规范将数据以图表的形式绘制出来。其绘制的数据源可以是动态数据,也可以存储数据中数据库中的数据、电子表格的数据等存储介质的数据。可通过在控件的属性页中设置数据来创建图表,或者也可以从其他数据源为控件对象设置数据。MSChart控件主要支持真三维表示,支持所有主要的图表和图形类型。
由于MSChart控件不是标准控件,要使用MSChart控件必需要将MSChart控件添加到控件工具箱中。添加MSChart控件的方法为选择"工程"|"部件"命令,在出现的"部件"对话框中选择"Microsoft MSChart Controls 6.0(SP4)"选项并单击"确定"按钮。这时候MSChart控件就被添加到VB的控件工具箱中。
源文档 <http://book.51cto.com/art/201007/215047.htm>
27.1.2 图表控件的基本属性(1)
设置MSChart控件对象的名称、大小、图表的标题、图表的页眉、图表的脚注、图表的行列数等,可通过设置MSChart控件的一些属性来完成。MSChart控件的基本属性如表27-1所示。
表27-1 MSChart控件的基本属性
编号 | 属 性 | 功 能 简 述 |
1 | ActiveSeriesCount | 根据MSChart控件对象中的列数与 绘制的图表类型返回图表中显示的系列数 |
2 | AllowDithering | 返回/设置一个数值,该数值决定是 否禁止八位彩色显示器上,图表的颜 色抖动,以便使用MSChart控件自身 的彩色调色板来增强图表的显示 |
续表
编号 | 属 性 | 功 能 简 述 |
3 | AllowDynamicRotation | 返回/设置一个数值,它指示是否在按下 Ctrl键显示旋转光标之后就可交互式 地旋转三维图表 |
4 | AllowSelections | 返回/设置一个数值,它指示是否可以 选择图表对象 |
5 | AllowSeriesSelection | 返回/设置一个数值,它指出在单击单 个的图表数据点时是否可选定整个系列 |
6 | AutoIncrement | 返回/设置一个数值,它决定在输入数 据期间,那些设置当前数据点的属性 值是否能不用人工设置Column和Row 属性而自动递增 |
7 | Backdrop | 返回对Backdrop对象的引用,它描述 在图表或图表元素后面的阴影、图案或图片 |
8 | BorderStyle | 返回/设置MSChart控件对象的边框样式 |
9 | Chart3d | 返回一个数值,此数值指定MSChart 控件对象中的图表是否为三维 图表 |
10 | ChartData | 返回/设置一个数组,该数组包含将要被 该图表显示的值 |
11 | ChartType | 返回/设置用于显示图表的图表类型 |
12 | Column | 返回/设置数据网格中当前的数据列 |
13 | ColumnCount | 返回/设置与图表关联的当前数据网格中的列数 |
14 | ColumnLabel | 返回/设置与图表数据网格中的列关联的标签文本 |
15 | ColumnLabelCount | 返回/设置与图表关联的数据网格中的列的标签级别数 |
16 | ColumnLabelIndex | 返回/设置与图表关联的特定列标签的级别 |
17 | Container | 返回/设置Form上控件的容器 |
18 | Data | 返回/设置被插入图表数据网格中的当前 数据点的数值 |
19 | DataBindings | 返回DataBindings集合对象,该对象包 含了有用的可绑定属性 |
20 | DataGrid | 返回DataGrid对象的引用,它描述与 图表关联的数据网格 |
21 | DataMember | 在数据提供程序提供的几个数据成员 中,返回或者设置特定的一个 |
22 | DataSource | 返回/设置一个数据源,通过该数据 源将一个数据使用者绑定到一个数据库 |
23 | DoSetCursor | 返回/设置一个数值,它指示图表是否能设置光标 |
24 | DragIcon | 返回/设置一个图标,它表示在MSChart 控件对象上进行拖放操作中将作为指针显示 |
25 | DrawMode | 返回/设置一个数值,它决定什么 时候以及如何重绘图表 |
26 | Enabled | 返回/设置一个值,该值用来确定一个窗 体或控件是否能够对用户产生的事件作出反应 |
27 | Footnote | 返回对Footnote对象的引用,它提供关 于注释图表所用的描述性文字信息 |
28 | FootnoteText | 返回/设置用作脚注的文本 |
29 | Height | 返回/设置MSChart控件对象的高度 |
30 | HelpContextID | 返回或设置MSChart控件对象一个 相关联上下文的编号 |
31 | hWnd | 返回MSChart控件对象的句柄 |
32 | Index | 返回/设置数,它唯一指定集合中的对象 |
33 | Left | 返回/设置对象内部的左边与它的容 器的左边之间的距离 |
续表
编号 | 属 性 | 功 能 简 述 |
34 | Legend | 返回对Legend对象的引用,它包含有关小 图标的外观及其描述图表系列的伴随文字的信息 |
35 | MousePointer | 返回/设置一个值,该值指定运行时当鼠标 位于对象的特定部分时应显示的鼠标光标类型 |
36 | Name | 返回/设置MSChart控件对象的名称 |
37 | OLEDragMode | 返回/设置是由部件还是由程序员来处理OLE拖放操作 |
38 | OLEDropMode | 返回/设置目标部件如何处理放操作 |
39 | Parent | 返回包含控件或其他对象或者集合的窗体、对象或集合 |
40 | Plot | 返回对Plot对象的引用,该对象描述图表的绘制区域 |
41 | RandomFill | 该属性指定是否随机产生图表数据网格的数据 |
42 | Repaint | 返回/设置值,该值决定图表被改变后是否重绘MSChart控件 |
43 | Row | 返回/设置与图表关联的数据网格中当前列的指定行 |
44 | RowCount | 返回/设置与图表关联的数据网格每一列的行数 |
45 | RowLabel | 返回/设置一个数据标签,该标签用来标识 图表中的当前数据点 |
46 | RowLabelCount | 返回/设置与图表关联的数据网格行标签的级别数 |
47 | RowLabelIndex | 返回/设置描述行标签级别的值 |
48 | SeriesColumn | 返回/设置当前系列数据列位置 |
49 | SeriesType | 返回/设置用于显示当前系列的类型 |
50 | ShowLegend | 返回/设置一个决定图表的图例是否可见的值 |
51 | Stacking | 设置一个决定图表的所有系列是否叠加放置的值 |
52 | TabIndex | 返回/设置父窗体中大部分对象的Tab键次序 |
53 | TabStop | 返回/设置一个值,该值用来指示是否能够 使用Tab键来将焦点从一个对象移动到另一个对象 |
54 | Tag | 返回/设置一个表达式用来存储程序中需要的额外数据 |
55 | TextLengthType | 返回/设置一个值,该值指定文本的显示 方式如何优化文本在屏幕或打印机上的输出效果 |
56 | Title | 对Title对象的引用,该对象描述图表的标题文本 |
57 | TitleText | 返回/设置作为图表标题而显示的文本 |
58 | Top | 返回/设置对象的内顶部和它的容器的顶边之间的距离 |
59 | Visible | 返回/设置一个值,它判断是否显示图表元素 |
60 | Width | 返回/设置MSChart控件对象的宽度 |
下面将介绍MSChart控件中一些常用的属性。
1.是否允许控件的颜色抖动
要设置控件是否允许颜色抖动,要以通过控件的AllowDithering属性来完成。AllowDithering属性用于返回或设置一个值,该数值决定是否禁止八位彩色显示器上,图表的颜色抖动,以便使用MSChart控件自身的彩色调色板来增强图表的显示。AllowDithering属性的语法如下:
Object.AllowDithering[=Boolean]AllowDithering属性的语法说明:
Object:必需的参数,取值为一个对象表达式,其值是MSchart控件对象的名称。
Boolean:必需的参数,取值为一个布尔表达式,其值用来指定是否允许颜色抖动,其常用取值为True或False。如果取值为True表示允许颜色抖动。如果取值为False表示MSChart控件的彩色调色板实现增强的彩色匹配和显示。系统默认值为False。
下面代码将设置控件对象MSChart1允许中的图表颜色抖动。
MSChart1.AllowDithering = True源文档 <http://book.51cto.com/art/201007/215048.htm>
27.1.2 图表控件的基本属性(2)
2.是否允许动态旋转图像
是否可以让控件中的图像旋转,可以通过控件的AllowdynamicRotation属性来设置。AllowdynamicRotation属性用于返回或设置一个值,它指示是否在按下Ctrl键显示旋转光标之后就可交互式地旋转其三维图表。AllowdynamicRotation属性的语法如下:
Object.AllowDynamicRotation[=Boolean]Boolean参数取值为一个布尔表达式,其值用来指定是否允许动态旋转图像,其常用取值为True或False。如果取值为True表示可以使用光标交互式旋转图表。如果取值为False表示不能使用光标交互式旋转图表。系统默认值为True。
3.是否允许选择控件中的图表
设置控件中的图表是否允许被选择,可以通过控件的AllowSelections属性来设置。AllowSelections属性用于返回或设置一个值,用来指示是否可以选择图表对象。AllowSelections属性的语法如下:
Object.AllowSelections[=Boolean]Boolean参数取值为一个布尔表达式,其值用来指定是否可选择图表中的对象,其常用取值为True或False。如果取值为True表示控件可以交互式地选择图表对象。 如果取值为False表示控件不能选择图表对象。系统默认值为True。
4.是否允许控件选定整个系列
要设置控件是否可以选择整个系列,可以通过控件的AllowSeriesSelection属性来设置。AllowSeriesSelection属性用于返回或设置一个值,它指出在单击的图表单个数据点时是否可选定整个系列。AllowSeriesSelection属性的语法如下:
Object.AllowSeriesSelection[=Boolean]Boolean参数取值为一个布尔表达式,其值用来指定是否可选定系列,其常用取值为True或False。如果取值为True,表示可以单击数据点选定整个系列。如果取值为False表示单击数据点时仅选定该数据点而不选定整个系列。系统默认取值为True。
5.设置显示三维图表
要设置控件中显示的图表是否为三维图表,可以通过控件的Chart3d属性来设置。Chart3d属性用于返回一个值,该值指定图表是否为三维图表。Chart3d属性的语法如下:
Object.Chart3D[=Boolean]Boolean参数取值为一个布尔表达式,其值用来指定控件是否显示三维图表。其常用取值为True或False。如果取值为True,表示控件中的图表是三维图表。如果取值为False表示控件中的图表不是三维图表。
说明:其显示的图表是否为三维还要取决于控件的ChartType属性取值。
6.设置控件图表的数据
设置控件显示图表的数据,可通过控件的ChartData属性来设置。ChartData属性用于返回或设置一个数组,该数组的值将要被控件作为图表显示在控件上。ChartData属性的语法如下:
Object.ChartData[=Data]Data参数取值为一个变体型数值、二维数组,其值包含用来绘制图表的数据。下面的代码表示根据数组"myData"中数组元素值,在MSChart控件对象绘制出图形,其代码如下:
PrivateSubForm_Load() DimmyData(2,2) myData(0,1)=" 第一季度 ' 设置第一列的标签 myData(0,1)=" 第二季度 ' 设置第二列的标签 myData(1,2)=82' 数组元素赋值 myData(1,2)=130 myData(2,2)=145' 数组元素赋值 myData(2,2)=120 MSChart1.ChartData = myData ' 将数组 myData 赋给控件 MSChartl EndSub以上代码就是将数组myData赋给控件对象MSChart1,控件对象MSChart1根据数组中的值在控件中绘制出相应的图形来,数组myData的存储类型为变体型。
说明:如果某个多维数组的第一列包含字符串,则这些字符串将成为图表的标签。
7.设置控件图表显示的类型
设置控件图表显示的类型,可通过控件的ChartType属性来设置。ChartType属性用于返回或设置用于显示图表的图表类型。ChartType属性的语法如下:
Object.ChartType[=Type]Type参数取值为一个常数,其值表示图表的类型,常用取值如表27-2所示。
表27-2 ChartType属性的取值
常 数 | 描 述 |
VtChChartType3dBar | 表示图表的类型为3D条形图 |
VtChChartType2dBar | 表示图表的类型为2D条形图 |
VtChChartType3dLine | 表示图表的类型为3D折线图 |
续表
常 数 | 描 述 |
VtChChartType2dLine | 表示图表的类型为2D折线图 |
VtChChartType3dArea | 表示图表的类型为3D面积图 |
VtChChartType2dArea | 表示图表的类型为2D面积图 |
VtChChartType3dStep | 表示图表的类型为3D阶梯图 |
VtChChartType2dStep | 表示图表的类型为2D阶梯图 |
VtChChartType3dCombination | 表示图表的类型为3D组合图 |
VtChChartType2dCombination | 表示图表的类型为2D组合图 |
VtChChartType2dPie | 表示图表的类型为2D饼图 |
VtChChartType2dXY | 表示图表的类型为2D XY散点图 |
下面代码将设置控件对象MSChart1中图表显示的类型设置为2D条形图,其代码如下:
MSChart1.ChartType = VtChChartType2dBar源文档 <http://book.51cto.com/art/201007/215049.htm>
27.1.2 图表控件的基本属性(3)
8.设置控件的数据列
要设置控件中的当前数据列和数据列的总数,可以通过控件的Column属性和ColumnCount属性来完成。Column属性用于返回或设置数据网格中当前的数据列。ColumnCount属性用于返回或设置与图表关联的当前数据网格中的总列数。Column属性和ColumnCount属性的语法如下:
Object.Column[=Col] Object.ColumnCount[=Count]Column属性和ColumnCount属性的语法说明:
Col:取值为一个整型表达式,其值表示当前所操作的数据列。
Count:取值为一个整型表达式,其值表示图表中的总列数。
下面代码将设置控件对象MSChart1中总的列数设置为3、当前列设置1,其代码如下:
MSChart1.ColumnCount = 3 ' 总的列数 MSChart1.Column =1' 当前列说明:Column属性主要用来设置当前列的标签。
9.设置控件的列标签
设置控件中有关图表的列标签可以通过控件的ColumnLabel属性、ColumnLabelCount属性、ColumnLabelIndex属性来设置。ColumnLabel属性用于返回或设置与图表数据网格中的列关联的标签文本。ColumnLabelCount属性用于返回或设置与图表关联的数据网格中的列的标签级别数。ColumnLabelIndex属性用于返回或设置与图表关联的特定列标签的级别。ColumnLabel属性、ColumnLabelCount属性、ColumnLabelIndex属性的语法如下:
Object.ColumnLabel[=Text] object.ColumnLabelCount[=Count] Object.ColumnLabelIndex[=Index]ColumnLabel属性的语法说明:
Text:取值为一个字符串表达式,其值表示与数据网格中的列相关联的标签文本。
Count:取值为一个整型表达式,其值表示列标签级别数。此属性以添加或删除数据网格列上的标签级别。
Index:取值为一个整型表达式,其值用来标识列标签级别。
下面代码将设置控件对象MSChart1中第3列的列标签为"教育",其代码如下:
MSChart1.ColumnLabelIndex = 3 ' 设置当前操作的列 MSChart1.ColumnLabel = " 教育 " ' 当前列的标题10.当前数据点
设置控件中显示图表的数据,可以通过控件的Data属性来指定。Data属性用于返回或设置被插入图表数据网格中的当前数据点的数值。Data属性的语法如下:
Object.Data[=Value]Value参数取值为一个整型表表达方式,其取值表示数据点数值。如果当前数据点已经包含数据,则新数据将代替原有数据。控件则会重新绘制图表以反映当前数据点的新数值。
下面代码将设置控件对象MSChart1第一列、第二行的值,其值来源于数组myData中对应的数组元素值赋给控件中的当前数据点,其代码如下:
MSChart1.Column =1' 设置当前操作的列 MSChart1.Row = 2 ' 设置当前操作的行 MSChart1.Data = myData (2,1)' 第一行第二列的数据11.设置控件中图表的光标
设置鼠标经过控件中的图表区是否显示光标,可通过控件的DoSetCursor属性来设置。DoSetCursor属性用于返回或设置一个数值,它指示图表是否能设置光标。DoSetCursor属性的语法如下:
Object.DoSetCursor[=Boolean]Boolean参数取值为一个布尔表达式,其值用来指定是否使用自定义文本,其常用取值为True或False。如果取值为True表示应用程序可控制鼠标指针的外观。如果取值为False表示应用程序不能控制鼠标指针的外观。系统默认取值为True。DoSetCursor属性决定应用程序是否能够控制鼠标指针的外观。
12.设置控件中图表的脚注
要设置控件中图表的脚注信息可以能过控件的Footnote属性、FootnoteText属性来设置,Footnote属性用于返回对Footnote对象的引用,它提供注释图表所用描述文字信息。FootnoteText属性用于返回或设置用作脚注的文本。Footnote属性、FootnoteText属性的语法如下:
Object.Footnote Object.FootnoteText[=Text]Text参数取值为一个字符串表达式,其值用来指定脚注信息。下面将设置控件对象MSChart1中图表的脚注设置成"说明:第一季度销售额××万元、第二季度销售额为××万元、平均销售额为××万元",代码如下:
MSChart1.FootnoteText =" 说明:第一季度销售额××万元、第二季度销售额为××万元、平均销售额为××万元"
还可以设置脚注的字体样式、颜色、大小等。
源文档 <http://book.51cto.com/art/201007/215050.htm>
27.1.2 图表控件的基本属性(4)
13.是否允许重绘
当控件图表中的值被改变后是否自动重绘控件。可以通过控件的Repaint属性来设置。Repaint属性用于返回或设置值,该值用来决定图表被改变后是否重绘MSChart控件对象。Repaint属性的语法如下:
crosoft Windows Common Controls-2 6.0"选项并单击"确定"按钮。这时候Animation控件就被添加到VB的控件工具箱中。
Object.Repaint[=Boolean]Boolean参数取值为一个布尔表达式,其值决定是否重绘该图表,其常用取值为True或False。如果取值为True表示重绘控件。如果取值为False表示当图表被改变后,不允许重绘该控件。系统默认取值为True。
14.设置控件的数据行
设置控件有关数据行的值,可通过控件的Row属性、RowCount属性来设置。Row属性用于返回或设置与图表关联的数据网格中当前列的指定行。RowCount属性用于返回或设置与图表关联的数据网格每一列的行数。Row属性、RowCount属性的语法如下:
Object.Row[=Num] Object.RowCount[=Count]Row属性、RowCount属性的语法说明:
Num:取值为一个整型表达式,其值表当前操作的行号。行的编号按从上至下的顺序,下标是从1开始。
Count:取值为一个整型表达式,其值表示图表中总的行数。
下面代码将设置控件对象MSChart1的总行数设为3、当前操作行设为2。
MSChart1.RowCount = 3 ' 设置总的行数 MSChart1.Row = 2 ' 设置当前操作的行15.设置控件的行标签
获得或设置控件有关数据行的值可以通过控件的RowLabel属性、RowLabelCount属性、RowLabelIndex属性来设置。RowLabel属性用于返回或设置一个数据标签,该标签用来标识图表中的当前数据点。RowLabelIndex属性用于返回或设置描述行标签级别的值。RowLabelCount属性用于返回或设置与图表关联的数据网格行标签的级别数。RowLabel属性、RowLabelCount属性、RowLabelIndex属性的语法如下:
Object.RowLabel[=Text] Object.RowLabelCount[=Count] Object.RowLabelIndex[=Index]RowLabel属性、RowLabelCount属性、RowLabelIndex属性的语法说明:
Text:取值为一个字符串表达式,其值用来指定行标签的文本。
Count:取值为一个整型表达式,其值表示标签级别数。可通过该属性来添加或减少数据网格的行标签级别。行标签的级别从1开始,从右往左进行编号。标签的添加或减少均在左边进行。
Index:取值为一个整型表达式。其值表示行标签级别。要给具有多级标签的行设置标签,或返回标签的当前值,必需先指定是对哪一级进行操作。行标签从右至左进行编号,编号从1开始。
下面代码将设置控件对象MSChart1中第1行的行标签为"2006年度",其代码如下:
MSChart1.RowLabelIndex = 2 ' 设置当前操作的行 MSChart1.RowLabel = "2006 年度 " ' 设置当前行的标题16.设置控件的当前系列
获得或设置当前数据列的位置和数据列的类型可以通过控件的SeriesColumn属性、SeriesType属性来设置。SeriesColumn属性用于返回或设置当前系列数据列位置。SeriesType属性用于返回或设置用于显示当前系列的类型。SeriesColumn属性、SeriesType属性的语法如下:
Object.SeriesColumn[=Pos] Object.SeriesType[=Type]SeriesColumn属性、SeriesType属性的语法说明:
Pos:取值为一个整型表达式,其值表示当前系列的列位置。可以使用这个属性对系列重新排序。如果两个系列被指定到同一位置,就形成叠放。
Type:取值为一个常数表达式,其值用来显示该系列的方法。其常用取值如表27-3所示。
表27-3 SeriesType属性的取值
常 数 | 描 述 | 常 数 | 描 述 |
VtChSeriesType3dBar | 三维直方图 | VtChSeriesType2dArea | 二维面积图 |
VtChSeriesType2dBar | 二维直方图 | VtChSeriesType3dStep | 三维阶梯图 |
VtChSeriesType3dLine | 三维折线图 | VtChSeriesType2dStep | 二维阶梯图 |
VtChSeriesType2dLine | 二维折线图 | VtChSeriesType2dXY | XY散点图 |
VtChSeriesType3dArea | 三维面积图 | VtChSeriesType2dPie | 二维饼图 |
说明:在使用SeriesType属性之前必需使用Column属性来选择相应的系列。
17.设置图表的标题
要设置控件中图表的标题,可以通过控件的TitleText属性来设置。TitleText属性用于返回或设置作为图表标题而显示的文本。TitleText属性的语法如下:
Object.TitleText[=Text]Text参数取值为一个字符串表达式,其值用来显示图表标题的文本。下面将把控件对象MSChart1中图表的标题设置"2006、2007年度销售额",代码如下:
MSChart1.TitleText = "2006 、 2007 年度销售额 " ' 设置图表标题源文档 <http://book.51cto.com/art/201007/215051.htm>
27.1.3 图表控件的基本方法
设置MSChart控件对象获得焦点、移动控件、重绘控件等操作,可通过调用MSChart控件的一些方法来完成。MSChart控件的基本方法如表27-4所示。
表27-4 MSChart控件的基本方法
编号 | 方 法 | 功 能 简 述 |
1 | Drag | 用于MSChart控件对象的开始、 结束或取消拖动操作 |
2 | EditCopy | 以Windows图元文件格式将当前图表 的图片复制到剪贴板中;它同时将创 建图表使用的数据复制到剪贴板中 |
3 | EditPaste | 将剪贴板中的Windows图元文件图形 或由Tab键分隔的文本粘贴到图表的当前选定区域 |
4 | GetSelectedPart | 标识当前选定的图表元素 |
5 | Layout | 布置图表,强制重新计算自动数值 |
6 | Move | 用以移动MSChart控件对象 |
7 | OLEDrag | 引起部件初始化OLE拖放操作 |
8 | Refresh | 强制全部重绘一个窗体或控件 |
9 | SelectPart | 选择指定的图表区域 |
10 | SetFocus | 将焦点转移到MSChart控件对象上 |
11 | ToDefaults | 返回图表的初始设置值 |
12 | TwipsToChartPart | 使用X、Y坐标来标识图表的区域 |
13 | ZOrder | 将指定的MDIForm,Form或 控件放置在其图层的前端或后端 |
下面将介绍MSChart常用的方法。
1.复制图表
要将控件的图表复制到操作系统中的剪切板中,可以通过控件的EditCopy方法来完成。EditCopy方法用于以Windows图元文件格式将当前图表的图片复制到剪贴板中。它同时将创建图表使用的数据复制到剪贴板中。使用此方法,可将图表数据或图表图片本身粘贴到另一应用程序中。因为数据和图表图片都存储在剪贴板上,因此粘贴到新的应用程序中的内容取决于该应用程序的类型。例如,如果在代码中执行图表的EditCopy方法,然后切换到Excel工作表来选择"编辑"中的"粘贴"命令,则将把图表数据集复制到工作表中。如要将图表图片插入到工作表中,可在选定"编辑粘贴特殊"后选择"图片"类型。EditCopy的语法如下:
Object.EditCopyEditCopy方法为一个无参方法。
2.粘贴图表
要将操作系统中剪切板中的图元文件和数据粘贴到控件中,可以通过控件的EditPaste方法来完成。EditPaste方法用于将剪贴板中的Windows图元文件图形或由Tab键分隔的文本粘贴到图表的当前选定区域。EditPaste方法的语法如下:
Object.EditPaste图表可接受剪贴板中的几种类型的信息,这取决于调用EditPaste时选定的图表元素。如果选定了整个图表,则图表在剪贴板中寻找数据并试图使用这些新数据重新绘制图表。如果选定能够接受图片的项目,例如选定了条形图或图表背景,则图表在剪贴板上寻找图元文件。如果找到了图元文件,就使用该图元文件填充选定对象。
3.获得选定图标元素
要获得当前控件中所选择的图表元素,可以通过控件的GetSelectedPart方法来设置。GetSelectedPart方法用于标识当前选定的图表元素。GetSelectedPart方法的语法如下:
Object.GetSelectedPart(Part,Index1,Index2,Index3,Index4)GetSelectedPart方法的语法说明:
Part:取值为一个整型表达式,其值用来指定图表元素。
Index1:取值为一个整型表达式,如果元素引用一个系列或一个数据点,则此参数指定引用的系列。系列编号时从1开始,根据它们对应的列在数据网格中从左到右显示的顺序依次编号。如果元素引用坐标轴或坐标轴标签,其常用取值如表27-5所示。
Index2:取值为一个整型表达式,如果元素引用数据点,则此参数指定系列中由Index1标识的数据点。
Index3:取值为一个整型表达式,如果元素引用坐标轴标签,则此参数引用标签级别。坐标轴标签级别从1开始、由坐标轴向外依次编号。如果元素不是坐标轴标签,则此参数无效。
Index4:取值为一个整型表达式,此时未使用该参数。
表27-5 Index1参数的取值
常 数 | 描 述 | 常 数 | 描 述 |
VtChAxisIdX | 标识X坐标轴 | VtChAxisIdY2 | 标识次要Y坐标轴 |
VtChAxisIdY | 标识Y坐标轴 | VtChAxisIdZ | 标识Z坐标轴 |
源文档 <http://book.51cto.com/art/201007/215052.htm>
27.1.4 图表控件的基本事件
MSChart控件对象提供常用事件有单击事件、双击事件、获得焦点事件、失去焦点事件等。MSChart控件的基本事件如表27-6所示。
表27-6 MSChart控件的基本事件
编号 | 事 件 | 何 时 触 发 |
1 | AxisActivated | 双击图表的标轴时,该事件发生 |
2 | AxisLabelActivated | 双击坐标轴标签时,该事件发生 |
3 | AxisLabelSelected | 单击坐标轴标签时,该事件发生 |
4 | AxisLabelUpdated | 改变坐标轴标签时,该事件发生 |
5 | AxisSelected | 单击图表坐标轴时,该事件发生 |
6 | AxisTitleActivated | 双击坐标轴标题时,该事件发生 |
7 | AxisTitleSelected | 单击坐标轴标题时,该事件发生 |
8 | AxisSelected | 单击图表坐标轴时,该事件发生 |
9 | AxisTitleActivated | 双击坐标轴标题时,该事件发生 |
10 | AxisTitleSelected | 单击坐标轴标题时,该事件发生 |
11 | AxisTitleUpdated | 坐标轴标题变更时,该事件发生 |
12 | AxisUpdatedEvent | 坐标轴变更时,该事件发生 |
13 | ChartActivated | 双击MSChart控件时,该事件发生, 但是双击图表的特定元素时事件不 发生 |
14 | ChartSelected | 单击MSChart控件时,该事件发生, 但是单击图表的某个元素时事件不 发生 |
15 | ChartUpdated | 当图表变更时,该事件发生 |
16 | Click | 此事件是在一个对象上按下然后释放 一个鼠标按键时发生 |
17 | DataUpdated | 图表数据网格变更时,该事件发生 |
18 | DblClick | 当在一个对象上按下和释放鼠标按键并 再次按下和释放鼠标按键时,该事件发生 |
19 | DonePainting | 重新绘制图表后,该事件立即发生 |
20 | DragDrop | 在一个完整的拖放动作完成或使用 Drag方法,并将其Action参数被设置为2时发生 |
21 | DragOver | 在拖放操作正在进行时发生 |
22 | FootnoteActivated | 双击图表脚注时,该事件发生 |
23 | FootnoteSelected | 单击图表脚注时,该事件发生 |
24 | FootnoteUpdated | 图表脚注变更时,该事件发生 |
25 | GotFocus | 当MSChart控件对象获得焦点时产生该事件 |
26 | KeyDown | 当MSChart控件对象具有焦点时按下一个键时发生 |
27 | KeyUp | 当MSChart控件对象具有焦点时松开一个键时发生 |
28 | KeyPress | 当用户在MSChart控件对象上按下和松开一个键时发生 |
29 | LegendActivated | 双击图表图例时,该事件发生 |
30 | LegendSelected | 单击图表的图例时,该事件发生 |
31 | LegendUpdated | 当图表的图例变更时,该事件发生 |
32 | LostFocus | 当MSChart控件对象失去焦点时发生 |
33 | MouseDown | 当在MSChart控件对象上按下鼠标按键时发生 |
34 | MouseMove | 当在MSChart控件对象上移动鼠标时发生 |
35 | MouseUp | 当在MSChart控件对象上释放鼠标按键时发生 |
36 | OLECompleteDrag | 当MSChart控件对象被放到目标部件 时发生,并通知MSChart控件对象 拖放操作被执行或取消 |
续表
编号 | 事 件 | 何 时 触 发 |
37 | OLEDragDrop | 当MSChart控件对象决定放操作能发生, 且MSChart控件对象被放到目标 部件时,此事件发生 |
38 | OLEDragOver | 当一个控件对象在另一个控件 对象上拖动时发生 |
39 | OLEGiveFeedback | 在每个OLEDragOver事件后发生。 OLEGiveFeedback允许源部件提供可视的反馈 |
40 | OLESetData | 当目标部件在源的DataObject对象上执行 GetData方法,但是还没有加载规定格式 的数据之前,在源部件上发生 |
41 | OLEStartDrag | 当部件的OLEDrag方法被执行时或 者在OLEDragMode属性被设为Automatic, 部件初始化OLE拖放操作时发生 |
42 | PlotActivated | 双击图表绘图区时产生该事件 |
43 | PlotSelected | 单击图表绘图区时产生该事件 |
44 | PlotUpdated | 当图表绘图区被改动时产生该事件 |
45 | PointActivated | 双击数据点时产生该事件 |
46 | PointLabelActivated | 双击数据点标签时产生该事件 |
47 | PointLabelSelected | 单击数据点标签时产生该事件 |
48 | PointLabelUpdated | 当数据点标签被改变时产生该事件 |
49 | PointSelected | 单击数据点时产生该事件 |
50 | PlotUpdated | 当图表绘图区被改动时产生该事件 |
51 | SeriesActivated | 双击图表系列时产生该事件 |
52 | SeriesSelected | 当单击图表系列时产生该事件 |
53 | SeriesUpdated | 当图表系列改变时产生该事件 |
54 | TitleActivated | 双击图表标题时产生该事件 |
56 | TitleSelected | 单击图表标题时产生该事件 |
55 | TitleUpdated | 当改变图表标题时产生该事件 |
57 | Validate | 在焦点转换到另一个控件之前发生 |
源文档 <http://book.51cto.com/art/201007/215053.htm>
27.1.5 示例--使用图表控件来两个年度的销售额
下面介绍使用MSChart控件来进行图表报表的示例,在本示例中以图表样式来显示两个年度的销售额,本示例中所示的销售额是虚拟的。本示例运行结果如图27-1所示。
要实现如图27-1所示的效果。其操作步骤如下:
(1)新建一个工程,工程名为"MSChart控件示例"。在窗体上添加1个MSChart控件、1个Command按钮、1个Combo控件、1个Label控件。
(2)调整窗体上各个控件对象的大小和位置,将窗体上的Label1的Caption属性设为"图表类型"、Command1的Caption属性设为"显示"。其窗体界面设计如图27-1所示。
(3)双击窗体,在其打开的代码窗体中添加如下代码。
在窗体加载时需要向窗体上ComBox控件中添加所有可显示图表的类型。窗体加载事件过程的代码如下:
OptionExplicit PrivateSubForm_Load()' 加载窗体 MSChart1.Visible = False ' 图表控件不可见 Combo1.AddItem"3D 条形图 "' 向 Combo 控件中添加图表的类型 Combo1.AddItem"2D 条形图 " Combo1.AddItem"3D 折线图 " Combo1.AddItem"3D 面积图 " Combo1.AddItem"2D 面积图 " Combo1.AddItem"3D 面积图 " Combo1.AddItem"3D 组合图 " Combo1.AddItem"2D 组合图 " Combo1.AddItem"2D 饼图 " Combo1.AddItem"2DXY 散点图 " EndSub在改变窗体上的ComBox控件图表显示的类型时,需要在改变图表类型的同时其显示的图表也做相应的改变。这个需要在ComBox控件的单击事件中完成。ComBox控件单击事件过程中的代码如下:
PrivateSubCombo1_Click()' 选择图表类型时 SelectCaseCombo1.ListIndex' 判断所选择的图表类型的索引号 Case0' 根据索引号给 MSChart1 的 chartType 属性赋相应的值 MSChart1.chartType = VtChChartType3dBar '3D 条形图 Case1 MSChart1.chartType = VtChChartType2dBar '2D 条形图 Case2 MSChart1.chartType = VtChChartType3dLine '3D 折线图 Case3 MSChart1.chartType = VtChChartType2dLine '2D 折线图 Case4 MSChart1.chartType = VtChChartType3dArea '3D 面积图 Case5 MSChart1.chartType = VtChChartType2dArea '2D 面积图 Case6 MSChart1.chartType = VtChChartType3dStep '3D 阶梯图 Case7 MSChart1.chartType = VtChChartType2dStep '2D 阶梯图 Case8 MSChart1.chartType = VtChChartType3dCombination '3D 组合图 Case9 MSChart1.chartType = VtChChartType2dCombination '2D 组合图 Case10 MSChart1.chartType = VtChChartType2dPie '2D 饼图 Case11 MSChart1.chartType = VtChChartType2dXY '2DXY 散点图 EndSelect EndSub窗体"显示"按钮主要用将数据按照图形的方式在窗体显示出来。在显示图表之前需要对显示的数据进行赋值后才能进行图表的显示。窗体"显示"按钮单击事件过程下的代码如下:
PrivateSubCommand1_Click()' 显示按钮 DimLi_iAsInteger' 定义一个变量用做循环变量 DimLi_jAsInteger DimLi_YearArray(2)AsInteger' 声明一个数组用于存入年份的值 DimLi_DataArray(2,12)' 声明一个二维数组。用于存储每个月的销售额 DimFirstTimeAsBoolean' 用于标识是否为第
一次显示。如为第一次显示则 True MSChart1.Visible = True ' 图表控件显示在窗体上 FirstTime = True ' 赋值为 True Li_YearArray(1)=2006' 赋年份的值 Li_YearArray(2)=2007 Li_DataArray(1,1)=120' 给 2006 年中的每个月份赋一个销售额 Li_DataArray(1,2)=80 Li_DataArray(1,3)=45.3 Li_DataArray(1,4)=10.4 Li_DataArray(1,5)=46.6 Li_DataArray(1,6)=189 Li_DataArray(1,7)=182.45 Li_DataArray(1,8)=142 Li_DataArray(1,9)=125 Li_DataArray(1,10)=95.99 Li_DataArray(1,11)=64.32 Li_DataArray(1,12)=16.1'2006 年第 12 月的销售额为 16.1 Li_DataArray(2,1)=45.63' 给 2007 年中的每个月份赋一个销售额 Li_DataArray(2,2)=124.66 Li_DataArray(2,3)=140 Li_DataArray(2,4)=201 Li_DataArray(2,5)=40 Li_DataArray(2,6)=88.2 Li_DataArray(2,7)=43.5 Li_DataArray(2,8)=68.4 Li_DataArray(2,9)=75.2 Li_DataArray(2,10)=175.22 Li_DataArray(2,11)=4.2 Li_DataArray(2,12)=73.86'2007 年第 12 月的销售额为 73.86 MSChart1.chartType = VtChChartType2dBar ' 设
置MSChart1的图表类型 MSChart1.ColumnCount = 12 ' 设置
图表中的总的列数 For Li_i = 1 To2' 将循环每个年份 MSChart1.RowCount = Li_i ' 图表的总行数 For Li_j = 1 To12' 将数组中的每个月份
的值显示在图表中 MSChart1.Column = Li_j ' 当前列数 MSChart1.Row = Li_i ' 当前行 MSChart1.Data = Li_DataArray (Li_i,Li_j)
'当前数据点的值 MSChart1.RowLabel = Li_YearArray (Li_i)&" 年 "' 当前行标签 IfFirstTimeThen' 判断是否为第一
次加载,如果是第一次则打 印每一列的标签 MSChart1.ColumnLabelIndex = Li_i MSChart1.Column = Li_j ' 当前列的索引 SelectCaseLi_j' 根据值来打印相应列的标签 Case1 MSChart1.ColumnLabel = " 一月 " ' 一月 Case2 MSChart1.ColumnLabel = " 二月 " ' 二月 Case3 MSChart1.ColumnLabel = " 三月 " ' 三月 Case4 MSChart1.ColumnLabel = " 四月 " ' 四月 Case5 MSChart1.ColumnLabel = " 五月 " ' 五月 Case6 MSChart1.ColumnLabel = " 六月 " ' 六月 Case7 MSChart1.ColumnLabel = " 七月 " ' 七月 Case8 MSChart1.ColumnLabel = " 八月 " ' 八月 Case9 MSChart1.ColumnLabel = " 九月 " ' 九月 Case10 MSChart1.ColumnLabel = " 十月 " ' 十月 Case11 MSChart1.ColumnLabel = " 十一月 " ' 十一月 Case12 MSChart1.ColumnLabel = " 十二月 " ' 十二月 EndSelect EndIf Next FirstTime = False ' 第一次循环完成后,
值设为False Next MSChart1.TitleText = "2006 、 2007 年度销售额(单位 : 万元) " ' 设
置图标的标题 MSChart1.Title.VtFont.Size = 15 ' 标题的大小 MSChart1.Title.VtFont.VtColor.Set255,0,0' 标题的颜色 MSChart1.Title.TextLayout.HorzAlignment =
VtHorizontalAlignmentCenter ' 标题文本的对齐方式 ' 设置图标的脚注信息,这里没
有计算月平均销售额 MSChart1.Footnote.Text =" 说明:最高销售额为 201 万元、最低销售额为 4.2 万元、 平均销售额为 XX 万元 " MSChart1.Footnote.VtFont.Size = 12 ' 脚注的大小 MSChart1.Footnote.VtFont.VtColor.Set255,0,0' 脚注的颜色 MSChart1.Footnote.TextLayout.HorzAlignment =
VtHorizontalAlignmentRight
'脚注文本的对齐方式 MSChart1.ShowLegend = True ' 显示图例 EndSub
运行程序,其运行效果如图27-1所示。在窗体上单击"显示"按钮,程序就会把Li_DataArray数组中的值在MSChart1中以图表的方式显示出来。可以通过选择图表类型列表中的图表名称来改变图表显示的方式。在本示例中图表中显示的数据是静态(虚拟的),如果要在图表中显示数据库中的数据则与本示例差不多唯一不同的是在显示图表之前,要将数据库的数据赋给对应数组,有兴趣的读者可以自己实现下。