图表与报表

 第九章 图表与报表
本章内容:
图 表
报 表
本章内容:
学会使用Chart和DBChart组件解决应用程序开发中的统计图表绘制问题;
学习一个用于表格显示和打印的组件包,用来解决应用程序开发中数据报表的显示和打印问题.
概述
9.1 图表组件(Chart)
Delphi的图表组件主要有Chart和DBChart两个.
Chart组件用于创建不使用数据表的图表;
DBChart组件则是Chart组件的数据库版本,它创建的图表必须使用数据表中的数据.
不过,除在数据表设置上有明显不同外,它们在图表设计方法上是一样的.
9.1.1Chart图表组件
Chart图表组件在Additional组件面板上,它为设计人员提供了功能非常强大的图表开发手段,为加快图表开发,此组件还为设计人员提供了图表设计器,通过图表设计器,设计人员可以非常容易地设计出应用程序中使用的各种复杂图表,为了让读者熟练利用图表设计器设计图表,下面先说明图表设计器的使用方法.
Chart图表组件
图表组件
9.1.1Chart图表组件
要使用图表组件创建或修改图表,首先要进入图表设计器,进入图表设计器的方法是:双击图表组件,打开一个图表设计窗口,读者可容易看出,图表设计窗口包含Chart和Series两个主选项页,下面分别介绍这两个选项页的基本作用 .
图表设计器
图表组件
Chart图表组件
图表设计器
图表样式选择窗口
1.Chart页
Chart页主要用于创建或修改图表,它又包含9个部分,分别是Series,General,Axis,Titles,Legend,Panel,Paging,Walls,3D.
图表设计器
(1) Series页
设计人员可创建或修改图表,series子页如图所示,在此页上有八个按钮,分别是:
↑/↓ 用于调整图表的先后顺序.
Add 用于增加一个新图表,单击此按钮将打开一个选择图表样式对话框,如图9-1-3所示,在这个窗口上选择需要的图表样式,然后按"OK"按钮即完成图表的创建工作.
Delete 删除用户选择的图表.
Title 为选择的图表设置新标题名.
Clone 按照当前选择的图表再克隆一个新图表.
Change 进入图表样式对话框,修改当前图表的样式.
Close 关闭图表设计器.
(2) General 页
General页 用于设置打印和显示图表时所用的参数,如图所示,主要包括:
Print Preview 图表打印预览按钮,单击此按钮,将打开一个打印预览窗口,在此窗口中可进行图表打印前的设置.
General页
Allow zoom 设置是否允许通过拖动鼠标来放大或缩小图表显示.
Export 用于将当前图表按指定的格式保存到剪切板或指定文件中,此按钮也打开一个对话框窗口,在此窗口中,可选择保存文件的类型.
Margins 设置图表在显示组件中的边距,可对图表的左,右,上和下四个边距进行设置.
Scroll 设置用鼠标右键拖动图表的方式,共有四种选择,分别为None(不可以),Vertical(只允许垂直方向),Horizontal(只允许水平方向),Both(水平和垂直方向均可).
(3) Axis页
Axis 页 用于设置图表的数轴,显示情况如图所示:
Axis页
Axis组 选择要设置的数轴,可选择的数轴有Left(左边),右(Right),Top(上边),Bottom(下边),Depth(深度)等,这是一个单选按钮组,选择完成后即可设置此数轴的参数.
Show Axis 设置是否显示数轴.
Visible 设置是否显示在Axis组中选择的数轴.
Scales子页
设置所选数轴的刻度大小,其中Maximum表示最大刻度值,Minimum表示最小刻度值,Increment表示数轴增加的步长;Automatic表示是否使用自动刻度,logarithmic表示按数据值的对数显示图表,Inverted表示垂直反转图表.
Title子页
用于设置每个数轴的标题,其中angle表示标题的旋转角度,Size表示标题与组件边界的距离,当为0时表示使用自动值,Font用于设置标题的字体,这里的字体,最好选择字体名前有@符号的旋转字体,选择这样的字体再结合Angle的设置,可达到较好的标题设置效果.
label子页
用于设置数轴上显示的标签.Visible表示是否显示标签;Round First表示是否从最小值开始设置标签;Label On Axis表示是否显示初始标签;Separation表示标签最小间隔比例;Values Format表示标签值显示的掩码,用于设置显示标签的格式;Style用于设置数轴上显示何种标签,默认(Auto)为系统自动设置,显示平均刻度数据值(Value,与Auto相同),数据文本(Text),图表中的数据值(Mark)和无标签(None).
Ticks子页
用于设置数轴上的标记,Axis Border用于设置数轴使用的线型,颜色和粗细等;Grid Border用于设置图表中的水平网格的线型,颜色和粗细等;Ticks按钮用于设置数轴外侧标记的线型,颜色和粗细等;inner按钮用于设置数轴内侧标记的线型,颜色和粗细等;Len则用于设置相应标记的长度.
Minor子页
用于设置数轴上的小标记,即由Count设置的细分标记.其中,Minor Ticks用于设置小标记线型,颜色和粗细等;Minor Grid用于设置细分网格的线型,颜色和粗细等;Len用于设置小标记的长度;Count用于设置每个水平网格之间的小网格的个数,注意只有此值不为0时,本页其余的设置才有意义.
(4) Titles页
Titles 页用于设置图表组件的标题和页脚,显示情况如图所示:
图表组件的Titles页
下拉框 它有Title和Foot两个选项,用于选择当前的设置是针对标题还是页脚.
Font 设置字体的有关属性.
Border 设置是否在文本四周显示边框及边框的颜色,线型和粗细等.
Alignment 设置文本显示的对齐方式,有左对齐(Left),右对齐(Right)和水平居中(Center)三种方式.
Adjust Frame 当设置显示边框时,选中此项表示仅在标题或页脚的四周 加边框,否则将在标题或页脚的整个显示区加边框.
Back Color 用于设置标题或页脚的背景颜色.
Pattern 用于设置标题或页脚的背景图案和颜色
(5) Legend页
用于设置图表中显示的"图例板",图例板的作用是显示图表组件中相关图表的基本信息,其显示情况如图所示:
图表组件中的Legend页
Visible 设置是否显示图例板.
Back Color 设置图例板的背景色.
Frame 设置图例板边框的线型,颜色和粗细等.
图例板
窗体上的显示的图表组件
Position组 设置图例板在组件中的位置,共有Left,Right,Top和Bottom 四种选择.
Legend Style 设置图例板的显示样式,共有四种,分别Automatic,Series Name,Series Values和Last Values,其中Automatic,Series Name的功能相同,表示显示图表的名称;Series Values表示显示图表的数据值;Last Values表示显示图表的最后一个数据值.
Text Style 此属性仅在Legend Style设置为Series Values或Last Values时起作用,用于设置在图例板上是显示数值,还是显示百分比.
%Top Pos 设置图例板在图表组件中的上边距占组件高度的百分比.
%Color Width 设置图例板上的图标占整个图例板宽度的百分比.
Dividing Lines 设置图例板上每行数据间是否加分隔线.
Shadow 设置图例板的阴影颜色和大小.
(6) Panel页
图表组件中的Panel页
(6) Panel页
用于设置图表组件面板的斜面,背景,边框等,其图示如下.在此页中可做如下设置:
Bevel Inner 设置图表面板内斜面的显示格式,它有三种选择,即平面 (None),下陷(Lower)和凸起(Raise).
Bevel Outer 设置图表面板外斜面的显示格式,可取值有三种,与Bevel Inner相同.
Width 斜面的宽度.
Back Image 用于设置或清除图表面板的背景图像,其中Browse用于加载背景图像;Inside表示背景图像是否仅限于图表的背景;Stretch表示通过放大图像来填充背景,Tile表示通过图像拼接来填充背景,Center表示仅使用原始图像,且显示在图表面板的中央.
Panel Color 用于设置图表面板的背景颜色.
Border 用于设置图表面板是否有边框.
Gradient 用于设置图表面板的背景颜色是否使用渐变色,其中Start Color表示开始色;End Color表示结束色;Visible表示是否使用渐变色; Direction用于设置渐变开始的方向,如Bottom Top则表示从底部到顶部渐变等.
(7) Paging 页
用于定义每个图表页上显示的数据点数.在Points per Page中输入的整数就是图表每页显示的数据点数,若此值为0则表示在一页上显示所有数据,用户可通过此页下面的First,Previous,Next和Last按钮来显示当前图表中未显示出来的数据点图像.
图表组件的Paging页
图表组件的Walls页
(8) Walls页
Walls页用于定义左边,下边和背景墙的大小和颜色,在此页中可做的设置如下:
Background 设置背景色.
Border 设置边框的线型,粗细和颜色.
Pattern 设置背景图案.
Size 用于设置背景墙的厚度.
Transparent 设置背景是否透明.图表组件的Walls页图表组件的3D页
Dark 3D 设置是否通过阴影体现立体效果
图表组件的3D页
(9) 3D页
用于设置图表的显示区域,位置,旋转等,在此页中可设置如下属性:
3 Dimensions 设置是否使用3维效果显示图表.
3D% 设置3维效果的程度.
Orthogonal 设置图表是否使用旋转效果,当不选中此项时,表示允许旋转.
Zoom 放大或缩小图表的显示区域.
Rotation 水平旋转图表,当Orthogonal不选时有效.
Elevation 垂直旋转图表,当Orthogonal不选时有效.
Horiz. Offset 设置图表水平位移的大小.
Vert. Offset 设置图表垂直位移的大小.
Perspective 当orthogonal为False时,此属性可设置图表的透视程度.
Zoom Text 设置是否使用用户定义的文本属性.
2.Series页
Series页中主要用于修改各种类型图表的参数,在此页顶部的下拉组合框中可选择要设置的图表,在它的下面有四个用于设置图表参数的子选项页,这四个子选项页是Format,General,Marks和Data Source,下面分别说明它们的设置方法.
图表组件的Format页
(1) Format 页
Format页中包含由图表类型决定的参数,如图所示的是柱形图表的Format页,在此页中可设置柱形的样式(Style),边框(Border),图案(Pattern),每个柱形是否同色(Color Each),柱的宽度比例(%Bar Width)和偏离数据点比例(%Bar Offset)等参数.
图表组件的Format页
(2) General页
可设置是否显示图例板(Show in Legend),鼠标在图表上显示的光标(Cursor),水平数轴的位置(Horizontal Axis),垂直数轴的位置(Vertical Axis),数据显示格式(Values),百分比显示格式(Percent)和是否使用日期时间(Datetime)作为数轴的刻度
图表组件的General页
(3) Marks页
在Marks页上可设置图表中显示的数据标记,在此页中可设置的属性有:
图表组件的Marks页
(3) Marks页
在Marks页上可设置的属性有:
Visible 设置是否显示数据标记.
Format 设置标记的背景色(Back Color),字体(Font),边框(Border),是否透明(Transparent)和超出图表的标记部分是否被剪切(clipped)等.
Arrow 用于设置标记与图形之间连线的颜色和长度.
Style 用于设置使用何种标记,如百分比(Percent),标签(label),数据值(value)及它们的组合等
(4) DataSource页
Data Source页可用于设置图表使用的数据(如图所示),在此页的下拉选择框中有三种选择,分别是No Data,Random Values和Function三种,它们均用于设计期的图表显示,当程序启动后,组件中并没有显示任何图表,只有增加了要显示的数据后,图表才能显示出来.
为图表组件添加数据一般使用图表的Add方法,使用格式为:图表对象.Add(数据值,'标题',颜色值),此语句功能是为指定的图表增加数据点.注意,在图表设计器中,每增加一个图表,在程序代码编辑窗口就增加一个与其对应的图表对象,默认图表对象名为SeriesN(N为自然数) .
(4) DataSource页
图表组件的DataSource页
例如,显示一个如图所示的图表.设置方法如下:
(1)放置组件
在窗体上放入六个SpinEdit组件,六个Label组件,一个BitBtn按钮组件和一个Chart组件,并将它们调整到合适的位置.
例如,显示一个如图所示的图表.设置方法如下:
(2) 设置组件的属性
设置Label组件的标题(caption)属性为"上海"等城市名;设置SpinEdit组件的Value属性值为图中显示的值;双击Chart组件,在打开的图表设计器中通过"Add"按钮增加一个柱形图表,然后通过图表设计器中的Title按钮修改图表名为"温度".
再到Chart页的Title子页,输入图表的标题名为"中国部分城市11月12日的温度图示".再到Axis子页,首先选择左侧坐标轴(Left),再到Axis页的Title子页中设置左侧标坐轴的标题为"温度",注意此处的字体最好设置为"@宋体",旋转角度为270度.对Bottom轴的设置与设置Left轴相似,请读者自己设置.
(3) 为图表增加数据
BitBtn1的OnClick事件的代码如下,其中Series1是在图表设计器中添加的Bar型图表:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Series1.Clear;
Series1.Add( spinedit1.Value , '上海' , clblue );
Series1.Add( spinedit2.Value , '北京' , clGreen );
Series1.Add( spinedit3.Value , '广州' , clwhite );
Series1.Add( spinedit4.Value , '济南' , clTeeColor );
Series1.Add( spinedit5.Value , '成都' , clTeeColor );
Series1.Add( spinedit6.Value , '西安' , clTeeColor );
end;
9.1.2 DBChart图表组件
DBChart图表组件在Data Controls组件面板上,如图所示.除设置数据源外,对该组件的设置方法与Chart图表组件的设置方法相同.
DBChart图表组件
图表
组件
例如,用图表显示Animale.dbf数据表的Size字段的值,设置后的显示结果如图所示.
使用数据表显示的图表
(1)建立一个项目文件,在主窗体上放入一个数据表组件Table1,将其DatabaseName,TableName和Active的属性设为DBDEMOS ,Animals.dbf和True.
(2)在主窗体上放入一个名为DBChart1的图表组件,并双击DBChart1组件进入图表设计窗口.单击此窗口中的"Add"按钮,选择满意的图表样式(例如选择Bar)并按"OK" .如果你想修改图表曲线的名称,单击图中的Title按钮,则打开一个标题编辑窗口,在此窗口中可完成图表名的修改.
(3)设置图表的数据源
进入图表设计窗口选择此窗口Series页的Data Source子选项页,在此页的下拉框中选择"DateSet" ,在显示窗口中的"DataSet"下拉框中选择要显示的数据表Table1;然后设置Label下拉框,在此框中选择数据表的字段名,此字段的值将作为X坐标轴上的标签.
在Label下拉框的下面还有两个选择框,分别是X和Bar(当图表为曲线时,此处显示为Y),X下拉框用于选择X轴上的坐标值所使用的字段.即X坐标使用的是此字段的值,而显示标签则是Label下拉框中指定字段值.Bar(或Y)中选择的字段是坐标系中Y轴的坐标值.
(3)设置图表的数据源
设置表示使用的数据源
9.2 打印数据表
打印数据表是每个数据库应用软件必须面对的问题.节将向读者介绍一个设计简单,可视程度高且与Excel表格有相似功能的报表打印组件包,此组件包是本书作者在俄罗斯人开发的Ehlib组件包的基础上编写出来的,作者为其命名为LEhlib,下面介绍此组件包的使用方法.
LEhlib组件
1.安装LEhlib组件包
安装方法:首先打开组件包项目文件LEhlib.dpk,然后参照3.2节安装开发包的方法即可完成此组件的安装.安装完成后,在组件面板上就会看到一个名为LEhlib的组件页.
2. LEhlib组件基本功能介绍
LEhlib组件中有17个组件,在这些组件中,最常用组件有三个,分别是DBGridEh( )表格组件,DBNavigatorL( )数据导航组件和PrintDBGridEh( )表格打印组件,它们是设计表格打印程序必不可少的组件,其中前两个组件与DBGird和DBNavigator组件的用法相似,但功能要比它们强大的多.
9.2.1 DBGridEh组件
DBGridEh是一个表格组件,它的设置和使用方法与我们以前使用的DBGrid组件非常相似,即设置其DataSource属性值为要显示的数据源,则在此表格中将显示此数据源对应数据表中的数据.与DBGrid组件相比,DBGridEh组件有更强大的功能.
1.DBGridEh的常用属性
AllowedOperations 用于设置在表格中允许的操作,可设置的操作如下:
alopInsertEh 设置此值表示允许按Insert键插入一条空记录.
alopUpdateEh 设置此值表示允许修改数据.

alopDeleteEh 设置此值表示允许按Ctrl_Del键删除记录
alopAppendEh 设置此值表示允许添加记录.
AllowedSelections 用于设置在表格中允许的记录选择方式,可设置的方式如下:
gstRecordBookmarks 设置此值表示允许在表格左边设置选择记录标志.
gstRectangle 设置此值表示允许通过鼠标拖放选择矩形区域.
gstColumns 设置此值表示允许通过单击表格列名选择一列.
gstAll 设置此值表示允许通过单击表格左上角单元格选择整个表格.
注意:当Options属性的dgMultiselect项设置为True时,对AllowedSelections的设置才有效.
ColumnLeftMargin 表示显示字段数据时左边留空的像素数,当其值为0时,则默认列宽度的1/15作为留空的像素数.
ColumnRightMargin 表示显示或打印数据表时,每列右边留空像素数.
DisplayZero 当设置此属性为True时,表示当数值型字段无确定值时,则在表格中显示0值,否则显示空值.
DrawDemoText 当设置此属性为True时,则显示备注字段的内容,否则不显示.
Flat 当设置此属性为True时,表格将按平面方式显示,否则按3D格式显示.
FooterRowCount 表示页脚行数.此值不为0时,则在表格的下方显示页脚,注意,页脚行数由此属性值确定,页脚中显示的内容则由列的Foot属性设置.
FrozeCols 表示从表格左边第一个字段开始,固定表格的列数,固定的列只能调整宽度,不能调整前后位置.
RowAlignOptions 用于设置表格的垂直对齐方式,它有RowTop,RowCenter,RowBottom三个选择,分别表示上对齐,垂直居中和下对齐.
RowSizingAllowed 当此属性值为True时表示允许通过鼠标设置行的高度,否则不允许.
ScoreFieldBegin,ScoreFieldEnd,ScoreID三个属性是专为开发成绩管理系统增加的属性,当ScoreID设置为True时,则列序号处于ScoreFieldBegin和ScoreFieldEnd属性值之间的字段值如果为0.001时,则显示"缺考",为0.002时,则显示"作弊".
Options 是一个集合属性,它有较多的属性值,例如当此值包含dgEditing时,表示可在表格中输入数据,当此属性值包含MultiSelect时.表示在表格中允许多记录选择.
注意,dgRowSelect和sdgEditing还能同时设置.
2.表格组件的列对象
表格组件的列对象是在列对象编辑器中增加的对象,它可完成数据显示格式,列页脚等设置,通过列对象的设置不仅能大大提高表格的显示效果,而且可完成数据表的计算和统计等功能.
2.表格组件的列对象
进入列对象编辑器的方法:双击DBGridEh表格组件,则显示列对象编辑窗口,用鼠标右键单击此窗口,在弹出的右击菜单中选择Add(或Add All Fields)功能项,并将数据表的字段作为列对象增加到列对象编辑窗口.
页脚
PrintDBGridEh1组件
DBGridEh1的列对象编辑器
右击菜单
双击
DBGridEh表格组件的列对象编辑器
列对象页脚属性的设置方法.
在对象观察器中,找到列对象的页脚属性(Footer),单击其左边的"+"符号,将此属性包含的子项展开,显示的子项名及功能如下:
Alignment 用于设置此列页脚的水平对齐方式.
DisplayFormat 用于设置页脚的显示格式.此属性与字段对象的同名属性有相同设置方法和功能;
FieldName 用于指定页脚中显示数据的数据源字段;
Value 表示页脚中要显示的值,此属性仅当ValueType的值为StaticText时有效;
ValueType 表示页脚中显示数据的类型
FvtNon 表示不显示页脚值;
FvtSum 表示页脚中显示的是指定字段值的和,这里的字段由FieldName属性指定,且必须是数值型字段;
FvtAvg 表示页脚中显示的是指定字段的平均值;
FvtCount 表示页脚中显示的是记录的个数;
FvtFieldValue 表示页脚中显示的是指定字段的当前值;
FvtStaticText 表示页脚中显示的是Value中输入的值;
WordWrap 用于设置当页脚显示内容的宽度超出所在列的宽度时是否折行显示,当其值为True时,表示允许折行显示.
注意:对列脚的设置可使用两个属性,一个是Footer,另一个是Footers.前者用于设置每列只有一行页脚的情况(即表格组件的FootRowCount属性值为1);当FootRowCount属性值大于1时,则需要使用Footers属性,下面简单说明Footers属性的设置方法.
通过Footers属性设置页脚:
1.增加页脚对象
在表格组件的列对象编辑器中,选择一个要设置页脚的字段,在对象观察器中,单击其Footers属性值输入框中的设置按钮,则打开一个列页脚对象编辑窗口,在此窗口的上部是一个有四个按钮的工具栏,其中: 表示增加一个列页脚对象,增加的列页脚对象就是Footer对象. 表示删除列页脚对象; 表示将当前选择的列页脚对象上移一位; 表示将当前选择的列页脚对象下移一位.注意:当FootRowCount属性值大于1时,则通过此窗口生成的页脚对象个数应与属性FootRowCount的值相同.
通过Footers属性设置页脚:
2.设置每个页脚对象的属性
在页脚对象编辑窗口中,对页脚对象的属性设置与对列对象的Footer属性的设置方法相同,不过要注意,在页脚对象编辑窗口中,页脚对象的排列顺序,对应于表格的页脚行号,即第1个页脚对象对应于表格页脚的第1行,依次类推.
例1:设置表格,使在Last_Name列页脚中显示数据表的记录个数和Last_Name字段的当前值,并在ACCT_NBR的页脚中显示字段ACCT_NBR的平均值.
新建一个项目文件,在主窗体上分别放入数据源,数据表,表格(DBGridEh)和数据导航(DBNavigatorL)组件,设置它们的相关属性使其显示Clients.dbf数据表,设置表格组件的属性FootRowCount的值为2,使表格有两行页脚.
增加要显示的列 双击表格组件,进入表格列对象编辑器窗口,用鼠标右键单击此窗口,在弹出菜单中选择"Add All Fields"菜单项,则当前数据表中的所有字段全部加入到列对象编辑器中,然后,删除不想显示的列.注意,如果列对象编辑中没有列对象,则默认显示所有数据表中的字段.
设置页脚.在列对象编辑器中,选择Last_Name列,在对象观察器中.找到其Footers属性,并单击其输入框中的按钮,在显示的页脚对象编辑器中增加两个页脚对象,并设置第一个页脚对象的FieldName和ValueType属性为Last_Name和fvtCount;设置第二个页脚对象的FieldName和ValueType属性分别Last_Name和fvtFieldValue.
再回到列对象编辑器,选择ACCT_NBR列,按刚才设置Last_Name列页脚对象的方法,为ACCT_NBR列对象增加一个列页脚对象,并设置此对象的FieldName和ValueType属性分别为ACCT_NBR和fvtAvg.
使用页脚.设置表格组件的SumList属性的子属性Active的值为True.
例2: 使用DBGridEh组件显示Clients.dbf数据表,使Last_Name和First_Name为Name的子栏,效果如图所示.
多层栏目显示数据表
按例1中的方法建立项目文件和主窗体,并将数据表中要显示的字段加入到表格的列对象编辑器中.
在列对象编辑窗口中,选择Last_Name列,在它的对象观察器中,找到它的标题属性Title的Caption子属性,设置Caption属性的值为:"Name|Last_Name",按同样的方法在列对象编辑窗口中设置First_Name列的标题名为"Name| First_Name",设置完成后的效果如上图所示.
说明:列的Title属性用于设置表格栏标题,其Caption子属性中的"|"字符用于设置多层栏名,"|"字符的个数决定栏名的层数,例如Name|Last_Name表示表格栏目有两层,注意,设置多层栏名前请将表格组件的UseMultiTitle属性值设置为True.
9.2.2 DBNavigatorL 组件
DBNavigatorL是一个用于浏览数据表的工具栏组件,它与以前用过的 DBNavigator 组件相似,只是比原来的导航组件有更多的功能按钮,通过这些按钮可完成几乎所有的表格操作.
使用此数据导航组件非常简单,首先将它放到窗体上,并正确设置它的相关属性,常用的属性及功能如下:
表格数据浏览组件
DBGridEh 设置要浏览的表格,是导航器必需设置的;
DBPrnGridEh 设置打印表格时需要的表格打印组件;
BackGroundEffect 设置背景,此属性有较多可供选择的值,下面是这些值的名称及含义:
bdFlat 表示ColorStart属性中设置的值为背景色;
bdStretchImage 使用bitmap属性中加入的图片,并自动伸展充满整个工具栏面板.
bdTileImage 将bitmap 属性中加入的图片以拼接方式填充背景;
bdUp 从颜色属性ColorStart到ColorEnd垂直渐进着色;
bdDown 从颜色属性ColorEnd到ColorStart垂直渐进着色;
bdLeft 从颜色属性ColorStart到 ColorEnd水平渐进着色;
bdRight 从颜色属性ColorEnd到ColorStart水平渐进着色;
bdHorzIn 从颜色属性ColorStart到ColorEnd水平向工具条中间渐进着色;
bdHorzOut 从颜色属性ColorEnd到ColorStart水平向工具条中间渐进着色;
bdVertIn 从颜色属性ColorStart到ColorEnd垂直向工具条中间渐进着色;
bdVertOut 从颜色属性ColorEnd到ColorStart垂直向工具条中间渐进着色;
DeleteConfirm 用于设置删除表格中的记录时是否显示确认对话框,当其值为True时,表示显示,否则不显示;
VisibleButtons 设置组件上可显示的按钮,它也有多个子属性,设置其值为True,则表示显示相应的按钮.
除上述属性外,DBNavigatorL组件还有两个常用的事件,分别是BeforeAction和AfterAction,前者表示执行按钮功能前要执行的事件代码,后者则表示执行按钮功能后要立即执行的事件,这两个事件有两个相同的参数,分别为Sender和Button.
除上述属性外,DBNavigatorL组件还有两个常用的事件,分别是BeforeAction和AfterAction,前者表示执行按钮功能前要执行的事件代码,后者则表示执行按钮功能后要立即执行的事件,这两个事件有两个相同的参数,分别为Sender和Button.其中Button参数用于判断用户单击的按钮.
例3:对Form1上DBNavigatorL1组件的BeforeAction事件编码,使得当单击"打印"或"模拟打印"按钮时,首先判断DBNavigatorL1的DBGrigd属性是否是DBGridEH1,若不是则显示"设置的打印表格不正确,不能打印!",若是则显示"欢迎使用打印程序!".则BeforeAction事件的代码如下:
procedure TForm1.DBNavigatorL1BeforeAction(Sender: TObject; Button: TNavigateBtn);
begin
case Button of
nprint,npreview: //判断用户单击的按钮
begin
if DBNavigatorL1.DBGridEhDBGrideh1 then
begin
showmessage('未设置打印表格,不能打印!');
abort;
end
else
showmessage('欢迎使用打印程序!');
end ;
end;
end;
说明:Button参数可能的取值有:nprint,npreview,nfind,nsaveas,nfont,ntitle,nvbottom,nvcenter,nvtop,nhleft,nhcenter,nhright,nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh,nbundo,nbsavetoserver,nbnsavetoserver,这些值与图中显示的按钮相对应.
1.打印及打印预览
本部分主要有两个按钮组成,一个是打印按钮( ),它可直接打印当前已选择的表格内容,另一个是打印预览按钮( ),可以在正式打印之前先预览一直打印效果.
单击预览按钮,则显示一个打印预览窗口,在此窗口中系统提供了另外一个用于操作打印模拟效果的工具栏.
打印预览窗口
工具栏
打印预览窗口中工具栏按钮的基本功能:
整页显示,以便用户从宏观上对表格进行设置.
正常显示,即用此方式的显示效果与打印效果基本相当.
加边显示.
放大显示比例.
缩小显示比例.
到第一页.
到上一页.
到下一页.
到最后一页.
打印预览窗口中工具栏按钮的基本功能:
转到指定页,执行此功能时,系统将显示一个窗口(如右图9-2-7所示),在此窗口中输入要查看的页号后按"确认"按钮,将转到指定页显示.
显示指定页
打印预览窗口中工具栏按钮的基本功能:
打印设置.单击此按钮,将显示打印设置对话框,在此窗口上有两个选项页,一个是"页面设置",另一个是"标题设置".
打印设置窗口
打印设置对话框
1)页面设置:
页面设置页有较多的选择项,按功能不同将其分为以下五个部分
第一部分:边距 本部分用于设置打印纸的页边距,共有四个编辑框,单位为厘米.
顶距:表示打印纸上部留空的高度.
底边:表示打印纸下部留空的高度.
左边:表示打印纸左边留空的宽度.
右边:表示打印纸右边留空的宽度.
注意:本软件有自动表格打印居中功能,即左右边距总是相等的,只有当打印表格的宽度大于打印纸宽度时,左右边距的设置才有效
1)页面设置:
第二部分:打印方向 本部分用于选择打印方向,共有两个选择,即横向( )和纵向( ).
第三部分:其它打印设置 本部分有两种选择,一个"字体"设置,一个是"其它设置".
字体设置:设置打印或显示表格时所用的字体.
其它设置:单击此按钮将显示打印机设置对话框,通过此对话框可完成打印机类型,打印方向,所用纸型及打印精确度等方面的设置 .
第四部分:行列设置
打印行列设置
1)页面设置:
第四部分:行列设置
适应页宽:用于将表格强制压缩到一页打印.若打印的表格宽度过大,打印字体就会自动缩小.否则,当打印表格的宽度超出打印纸宽度时,系统将超出部分自动转到下一页打印,此功能可用于大表的拼接.即打印完成后将多页内容拼到一起构成一个整表.
优化列宽:用于设置列宽为最小宽度,但要注意,当表格列名较长时则不宜使用此功能,因为优化列宽时,列名的长度也在考虑之内.当不选择此项时,则按用户设置的列宽打印.
1)页面设置:
第五部分:双栏打印设置
双栏:选择此项,表示打印时分两栏打印,每栏相当于原来的一页,故称为"双栏".不选择此项,则按"单栏"打印.
中线:本项设置仅在双栏设置后有效.选择此项,则在两栏之间加一条分隔线.
页号:选择此项则打印页号,否则不打印.
间距:当选择双栏打印时,用于设置两栏之间的间隔距离,单位为厘米.
2)标题设置:
本选项页主要用于设置打印表格的标题,此窗口主要由两部分组成,第一部分为"页头",另一部分为"页脚".
第一部分:页头 此部分有三个输入窗口,分别用于输入中间标题和左右子标题的内容,输入窗口如9-2-13所示,此输入窗口中设置的内容与打印表之间的对应关系如图9-2-15所示.
标题设置窗口
设置字体对话框
2)标题设置:
第二部分:页脚 此部分的设置与页头的设置方法相同.
页脚左
标题位置
页脚右
标题位置
页脚中
间标题
页头右
标题位置
页头左
标题位置
页头中
间标题
注意:
在标题设置中都有形如"A字体"的按钮,它用于设置相应窗口的字体,字型和大小等属性,单击此按钮,启动字体设置窗口),用户可根据自己的需要设置字体.
在页面设置中若设置了页号,则页脚中间标题的设置无效.
打印预览窗口中工具栏按钮的基本功能:
打印当前内容 .点击此按钮后,系统将显示如图所示的对话框,用户可根据自己需要设置打印机名称,打印范围和打印份数等;同时,用户还可在此对话窗口中利用"属性"按钮设置打印机的其它相关属性,如打印精度,走纸的方向,纸张大小等.
"打印"按钮显示的对话框
打印预览窗口中工具栏按钮的基本功能:
停止打印处理 .此按钮的功能是中断当前对打印文件的处理.当模拟或打印表格时,若设置不当可能会出现长时间的表格处理,单击此按钮可使程序立即停止处理工作.当然,若要打印的文件已经处理完毕,单击此按钮将无效.
2.保存文件( )
本部分主要用于将当前选择的表格另存到其它类型的文件中,这里另存的六种文件是:Excel文件(*.xsl),Word文件(*.rtf),文本文件(文本文件有两种,一种是用制表符分隔数据的.TXT文件,另一种是用分号分隔数据的.CSV文件),超文本文件(*.htm)和VFoxpro文件.
另存文件对话框
3.修改显示字体 ( )
主要用于设置当前表格显示的字体,单击此按钮,将出现一个字体对话框,通过此对话框,用户可选择自己喜欢的字体.
4.修改表格的列标题( )
此按钮将为用户提供修改列标题的功能.
标题设置窗口
4.修改表格的列标题
第一列是标志显示列,主要用于显示表格相应列是否为显示序号列.
第二列显示的是当前表格的原有列名,此列是修改新列名的参考列名,用户不需修改此列.
第三列是用户修改后的新列名.
"增加" 增加临时列,若用户想在原来的表格基础上再增加新列,则只需要单击"增加"按钮.
"删除" 删除临时列.只能删除新增加的临时列.
"序号" 设置增加的列为序号列,此列中将自动显示每个记录的顺序号.此功能只适用于设置临时增加的列.
4.修改表格的列标题
表格多层标题设置
设置方法 :用"|"分隔主列名与子列名,若主列名相同,则相邻的列将自动合并到一起.
5.表格垂直方向显示位置的设置
行中内容底部对齐显示.
行中内容显示在两条水平表格线的中间,又叫垂直居中.
行中内容顶部对齐显示.
6.表格水平方向显示位置的设置
光标所在列内容水平左对齐 .
光标所在列内容水平居中 .
光标所在列内容水平右对齐 .
7.移动记录指针
将记录指针移到第一条记录上(也可用Ctrl_Home组合键)
将记录指针上移一条记录(也可用上移光标键"↑")
将记录指针下移一条记录(也可用下移光标键"↓")
将记录指针移到最后一条记录上(也可用Ctrl_End组合键)
8.编辑记录
在当前记录前插入一条新记录.
删除记录指针所指的记录.
将当前记录置为修改状态.
保存修改或插入的记录取消当前记录的修改
取消当前记录的修改
9.用于客户/服务器结构的功能按钮
用于将当前显示的内容刷新为服务器中的最新数据.此按钮主要应用于服务器版,对单机版应用程序无意义.
恢复到修改前的状态.
将修改保存到服务器.
取消对数据的修改
4.修改表格的列标题
表格多层标题设置
设置方法 :用"|"分隔主列名与子列名,若主列名相同,则相邻的列将自动合并到一起.
5.表格垂直方向显示位置的设置
行中内容底部对齐显示.
行中内容显示在两条水平表格线的中间,又叫垂直居中.
行中内容顶部对齐显示.
6.表格水平方向显示位置的设置
光标所在列内容水平左对齐 .
光标所在列内容水平居中 .
光标所在列内容水平右对齐 .
9.2.3 PrintDBGridEh 组件
PrintDBGridEh是专用于打印DBGridEh 表格的组件,它有大量用于设置表格打印格式的属性,包括数据导航组件中的部分功能也可通过设置打印组件的属性来实现.为方便编程,此组件还为开发人员提供了多个方法和事件,下面分别介绍它们的名称及其功能.
1.常用属性:
AfterGridText 设置表格下方打印的文本内容
BeforeGridText 设置表格上方打印的文本内容.
DBGridEh 设置要打印的表格组件,它是打印表格时必须设置的属性.
1.常用属性:
BeforeTwoColumn 当设置为分两栏打印时,用此属性设置BeforeGridText中的文本是否作为两栏共有的文本,若其值为False则表示在第一页的第一栏前单独显示BeforeGridText中设置的文本.
PrintType 设置是否分类打印,即同类别的记录打印在一起.
PrintTypeLeftTitle 设置当分类打印时,页眉中左边副标题中显示的内容.
PrintTypeOnePage 设置当分类打印时,对每类打印内容重新编页号.
1.常用属性:
PrintTypeField 设置要分类打印的参照字段,设置的内容格式为"字段名1;字段 2;…",例如:"年级;专业;班级".此属性仅当PrintType为True时有效,本组件将此处指定字段的字段值相同的记录为一类.因此,若用户想按字段值分类打印数据表,最好先按这些字段排序.
IdDisplay 用于设置当打印的数值型字段的值小于DBGridEh.FlunkPoint(不及格成绩)时,打印数据的同时打印由IdBColor指定的背景色.
IdBColor 数值型字段值小于DBGridEh.FlunkPoint时打印的背景色.
1.常用属性:
IdFColor 数值型字段值小于DBGridEh.FlunkPoint时打印的字体颜色.
PrintUniqueValue 用于设置是否按字段值唯一打印,当此属性的值为True时,字段值连续相同的列将垂直合并.
PrintUniqueFieldCount 从表格第1列开始允许垂直合并的列数.
1.常用属性:
Options 设置打印表格的相关属性,它有四个可供选择的值,其中:
PghFitGridToPageWidth 设置表格适应页宽打印,即无论表格宽度如何,将强迫表格的打印宽度不超过打印纸的宽度,因此,打印的表格越宽,则打印的字体就越小.
PghOptimalColWidths 优化数据表的列宽度,即按尽可能窄的方式打印表格的各个列.
PghRowAutoStretch 设置当字段内容的长度超出列的宽度时,是否允许折行打印,即当设置此值时,表格的行高将随打印内容的多少自动伸展.
PghColored: 设置按显示的颜色打印表格,否则打印黑白表格.
1.常用属性:
Page 用于设置打印纸格式,它有如下子属性:
TopMargin 设置打印纸的上边距;
BottomMargin 设置打印纸的下边距;
RightMargin 设置打印纸的右边距;
LeftMargin 设置打印纸的左边距;
HavePageNum 设置是否在页脚中插入页码;
TwoColumn 设置是否分栏打印;
TwoColumnDrawLine 设置两栏之间是否打印分割线;
1.常用属性:
Page 用于设置打印纸格式,它有如下子属性:
TwoColumnMargin 设置两栏之间的距离;
Orientation 设置打印纸型;
GridCenter 当其值为True时表示表格水平居中打印,否则按用户设置的左右边距打印;
DrawCube 设置是否打印图表,这是专用于打印成绩统计表设计的属性.
DrawTilte 设置统计表的标题名.
DrawBarField 统计表Y轴的字段名.
DrawXField 统计表X轴的字段名.
1.常用属性:
PageHeader 用于设置表头标题的内容和字体,它的子属性如下:
CenterText 用于设置表头的中间标题.
LeftText 用于设置表头左侧的副标题名.
RightText 用于设置表头右侧的副标题名.
LRFont 用于设置表头左右副标题的字体.
CFont 用于设置表头中间主标题的字体.
LineType 设置副标题与表格间是否需要分隔线,它有pcltNon(无线),pcltSingleLine(单线),pcltDoubleLine(双线)三种选择.
1.常用属性:
PageFooter 用于设置页脚中的内容和字体,它有与PageHeader属性相同的子属性,只是PageFooter的子属性设置的是页脚.
PrintFontName 设置打印表格所用的字体名,此设置仅适用于打印.也可通过修改表格组件的字体来实现打印字体的设置.
Title 用于设置要打印的表格标题
2.常用事件:
常用的事件有两个,OnBeforePrint和OnAfterPrint,它们分别表示打印表格前后要执行的事件,若要在打印前设置打印表格的某些参数,应使用OnBeforePrint事件,而在表格打印完成后需要执行的代码写在打印表格的OnAfterPrint事件中.
3.常用方法:
常用方法有两个,Print和Preview.前者表示直接打印此组件对应的表,后者显示模拟打印结果.
格式为:PrintDBGridEh组件名. Print或PrintDBGridEh组件名. Preview.
注意,使用这两个方法前,要首先设置PrintDBGridEh组件的DBGridEh属性值.
例4: 通过Query组件在Customer.db和Orders.db表之间建立的主细表,要求使用DBNavigatorL组件打印主表和细表,即当用户选择主表时,则打印主表,而当用户选择细表时,则打印细表,并要求通过代码设置打印表格的标题.
主/细表打印演示程序
具体操作步骤:
按图示增加相应的组件.表格组件分别为DBGridEh1和DBGridEh2,打印组件为PrintDBGridEh1,数据导航组件为DBNavigatorL1,相对应的两个数据源组件分别为DataSource1和DataSource2,数据表组件分别为Table1和Query1,标签组件分别为Label1和Label2,并在窗体类的Public中定义名为IsMainTable的逻辑变量.
通过Table和Query建立Customer.db和Orders.db的主细表.相关组件的设置如下:
Table1.DatabaseName←DBDEMOS
Table1. TableName←Customer.db
具体操作步骤:
Table1.Active←true
DataSource1.DataSet←Table1
Query1.DatabaseName←DBDEMOS
Query1.SQL←Select * from Orders.db where CustNo=:CustNo
Query1.DataSource ←DataSource1
Query1.Active←true
DataSource2.DataSet←Query1
具体操作步骤:
设置打印组件.相关设置如下:
DBGridEh1.DataSource←DataSource1
DBGridEh2.DataSource←DataSource2
PrintDBGridEh1.DBGridEh←DBGridEh1
DBNavigatorL1.DBGridEh←DBGridEh1
DBNavigatorL1. PrintDBGridEh←PrintDBGridEh1
编写事件代码.需要编写的事件代码有DBGridEh1和DBGridEh2的的OnEnter事件,DBNavigatorL1的BeforeAction事件,其代码详见下列程序清单.
procedure TForm1.PrintDBGridEh1BeforePrint(Sender: TObject); / / PrintDBGridEh1的BeforePrint事件
begin
PrintDBGridEh1.Page.GridCenter:=true; //设置打印的表格在打印纸中水平居中.
end;
procedureTForm1.DBNavigatorL1BeforeAction(Sender:TObject; Button: TNavigateBtn);
begin
case button of
nprint,npreview: //判断用户单击的是否是"打印"或"模拟显示"按钮
begin
//设置表左子标题为打印日期
PrintDBGridEh1.PageHeader.LeftText.Text:='制表日期:'+Datetostr(date);
If IsMainTable Then //若用户选择的是主表
begin
PrintDBGridEh1.PageHeader.CenterText.Text:='主表Customer' ; //设置打印主标题
PrintDBGridEh1.DBGridEh:=DBGridEh1; //设置打印DBGridEh1表
end
Else begin
PrintDBGridEh1.DBGridEh:=DBGridEh2; //设置打印DBGridEh2表
PrintDBGridEh1.PageHeader.CenterText.Text:='客户号为'+
table1.fieldbyname('Custno').asstring+'订单情况表';
end;
end;
end;
end;
procedure TForm1.DBGridEh1Enter(Sender: TObject); //组件DBGridEh1的OnEnter事件
begin
IsMainTable:=True; //表示选择了主表
DBNavigatorL1.DBGridEh:=DBGridEh1; //使DBGridEh1表使用导航器
end;
procedure TForm1.DBGridEh2Enter(Sender: TObject); //组件DBGridEh1的OnEnter事件
begin
IsMainTable:=False; //表示选择了细表
DBNavigatorL1.DBGridEh:=DBGridEh2; //使DBGridEh2表使用导航器
end;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值