建立自己的报表预览程序Word文件下载.docx
- 文档编号:21618727
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:12
- 大小:338.99KB
建立自己的报表预览程序Word文件下载.docx
《建立自己的报表预览程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《建立自己的报表预览程序Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
设置输出模式
oListener.OutputType=1
*!
*下面的代码用于指定预览容器
olistener.PreviewContainer=NEWOBJECT("
ControlPreview"
"
AdditionSamples.vcx"
*下面的REPORTFORM命令将开始执行报表,同时将执行ControlPreview的SetReport方法,
*传递ReportListener对象引用给ControlPreview,但是由于此时报表还未绘制完毕,所以并不
*能获得报表的总页数、页面高度等信息。
在绘制完毕后,ReportListener将调用ControlPreview
*的Show方法,进行预览输出,由于此时报表已经准备完毕,所以你可以在Show方法中获得
*报表的页面高度等信息
REPORTFORM(lcreport)OBJECToListenerNOWAIT
我们将通过下面的示例来说明建立自己报表预览程序的方法,任何报表都可以使用该程序进行预览输出。
为了更好地说明这个预览程序的功能,首先来看一下设计完成后的执行效果,如图1所示。
通过这个预览程序,可以设置报表的显示百分比、通过导航或直接定位要预览的页,以及指定报表的打印范围。
图1报表预览程序界面
1)建立基于Form的类
在VisualFoxPro的Command窗口中执行CREATECLASS命令,打开如图2所示的NewClass(新建类)对话框。
设置新建类的名称为ControlPreview,基于Form类,存储在AdditionSamples.vcx类库中。
设置完成后单击OK按钮,将打开ClassDesigner(类设计器)对话框,最终设计结果如图3所示。
图2NewClass对话框
图3ControlPreview类最终设计结果
2)表单的关键属性设置
表单的关键属性设置如表1所示。
表1
对象
属性
值
说明
ControlPreview
(表单)
AllowOutput
.F.
不允许将“?
”等命令显示输出到该表单中
nCurrentPage
1
自定义属性。
储存当前正在显示的报表页号
nPageHeight
100
存储当前报表页面的高度
nPageWidth
存储当前报表页面的宽度
oListener
.NULL.
存储通过SetReport方法传递给该程序的对ReportListener对象的引用
ScrollBars
3
设置表单根据需要显示水平和垂直滚动条
cboPer
RowSourceType
RowSourceType和RowSource用于设置组合框中可用的报表显示百分比
RowSource
25,50,100,150,200,500
cmdTop
Caption
|<
该按钮用于导航到报表的第一页
cmdPrev
<
该按钮用于导航到报表的上一页
cmdNext
>
该按钮用于导航到报表的下一页
cmdBott
|
该按钮用于导航到报表的最后一页
cmdPage
指定页
该按钮用于显示txtPage文本框中指定的报表页
txtPage
Value
该文本框用于显示当前预览页面的页号,也可以在其中输入一个页号,然后单击cmdPage按钮定位到该页
optPrint
ButtonCount
2
该对象是表单中的选项按钮组,具有2个按钮
BorderStyle
不具备边框
默认选定第一个按钮
Option1.Caption
打印所有页
选定该按钮后,表单中的txtFrom和txtTo文本框将变为禁止状态
Option2.Caption
打印指定页
选定该按钮后,表单中的txtFrom和txtTo文本框将变为可用状态
txtFrom
默认值为1
Enabled
在表单启动时,默认为禁止状态
txtTo
cmdPrint
打印(\<
P)
该按钮根据打印选择输出报表到打印机中
cmdClose
关闭
该按钮用于关闭表单
shpPreview
用于显示报表的形状对象
3)预览程序的初始化设置
在预览程序的初始化部分,需要获得对ReportListener对象的引用,然后通过这个引用,获得报表的页面尺寸,进而设置表单中shpPreview对象的大小。
预览程序的初始化设置不能在表单的Init事件进行,因为在该类实例化的时候,有可能ReportListener对象还未建立,或者ReportListener还未进行报表处理,所以此时你无法获得报表的任何信息。
根据前面的介绍,ReportListener是通过预览程序的SetReport方法将ReportListener传递给预览程序的。
因此,在表单中需要新建一个SetReport方法,代码如下:
LPARAMETERSoListenerRef
This.oListener=oListenerRef
将对ReportListener对象的引用保存到表单的oListener属性中
ReportListener在报表绘制完成后,将调用预览程序的Show方法显示表单。
由于此时报表已经绘制完成,所以可以在此方法中获得报表页面的高度、宽度值,进而设置shpPreview对象的大小。
由于表单对象默认地具有Show方法,因此,只需要在该方法中填入下列代码即可。
LPARAMETERSnStyle
WITHThis
IFVARTYPE(.oListener)="
O"
.nPageHeight=.oListener.GetPageHeight()/10
获得页面的像素高度(每英寸96DPI)
.nPageWidth=.oListener.GetPageWidth()/10
获得页面的像素宽度
.shpPreview.Height=INT(.nPageHeight)
设置形状的高度
.shpPreview.Width=INT(.nPageWidth)
设置形状的宽度
.Caption="
报表预览程序-"
+.oListener.CommandClauses.File
标题中包含有报表的文件名称,见图13-68
.Refresh
ENDIF
ENDWITH
DODEFAULT(nStyle)
执行默认的Show方法行为
4)报表显示比例设置
在表单的cboPer组合框的InteractiveChange事件中包含有下列代码,用于根据选择的显示比例设置shpPreview形状的大小,然后重新输出报表。
WITHThisform
.shpPreview.Height=INT(.nPageHeight*VAL(.cboPer.Value)/100)
.shpPreview.Width=INT(.nPageWidth*VAL(.cboPer.Value)/100)
.oListener.OutputPage(.nCurrentPage,.shpPreview,2)
ENDWITH
5)报表导航设置
“|<
”按钮用于导航到报表的第一页,其Click事件代码如下:
.nCurrentPage=1
.oListener.OutputPage(1,.shpPreview,2)
显示第一页
.CmdRefresh()
设置按钮的可用状态
.txtPage.Value=1
“<
”按钮用于导航到当前报表的上一页,其Click事件代码如下:
.nCurrentPage=.nCurrentPage-1
当前报表页号减1
显示指定页
.txtPage.Value=.nCurrentPage
“>
”按钮用于导航到当前报表的下一页,其Click事件代码如下:
.nCurrentPage=.nCurrentPage+1
|”按钮用于导航到报表的最后一页,其Click事件代码如下:
.nCurrentPage=.oListener.OutputPageCount
显示最后一页
“指定页”按钮用于导航到在txtPage文本框中指定的页号,其Click事件代码如下:
IF.txtPage.Value>
=1AND.txtPage.Value<
=.oListener.OutputPageCount
.nCurrentPage=.txtPage.Value
.oListener.OutputPage(.nCurrentPage,.shpPreview,2)
Thisform.CMDRefresh
ELSE
=MESSAGEBOX("
页号无效或已经超出了总页数"
0+48,"
提示"
)
在上面5个按钮的Click事件中都使用了表单的自定义方法CMDRefresh来控制“|<
”、“<
”、“>
”和“>
|”按钮的可用性,该方法的代码如下:
.cmdPrev.Enabled=VARTYPE(.oListener)='
O'
and.nCurrentPage>
1
.cmdNext.Enabled=VARTYPE(.oListener)='
and;
.nCurrentPage<
.oListener.OutputPageCount
.cmdTop.Enabled=VARTYPE(.oListener)='
.cmdBott.Enabled=VARTYPE(.oListener)='
6)打印设置
在选项按钮组optPrint的InteractiveChange事件中包含有下列代码,用于控制txtFrom和txtTo文本框的可用性。
IFThis.Value=1
Thisform.txtFrom.Enabled=.F.
Thisform.txtTo.Enabled=.F.
ELSE
Thisform.txtFrom.Enabled=.T.
Thisform.txtTo.Enabled=.T.
ENDIF
“打印”按钮的Click事件代码如下所示。
在执行打印后,将关闭表单。
请注意其中的.oListener.PreviewContainer=.NULL.代码,在执行RELEASEThisform命令前,必须首先使用该代码释放对预览程序对象的引用,否则是无法关闭表单的。
对于打印页范围的选择,是通过CommandClauses属性的PrintRangeFrom和PrintRangeTo成员来实现的,有关这方面的信息请参考VisualFoxPro帮助。
DOCASE
CASE.optPrint.Value=1
.oListener.CommandClauses.PrintRangeFrom=1
.oListener.CommandClauses.PrintRangeTo=.oListener.OutputPageCount
.oListener.PreviewContainer=.NULL.
取消对预览程序对象的引用
.oListener.OnPreviewClose(.T.)
输出到打印机
.oListener=.NULL.
CASE.optPrint.Value=2
IF.txtFrom.Value<
1OR;
.txtFrom.Value>
开始页号设置无效!
"
48,"
RETURN
IF.txtTo.Value<
.txtTo.Value>
终止页号设置无效!
=.txtTo.Value
.oListener.CommandClauses.PrintRangeFrom=.txtFrom.Value
.oListener.CommandClauses.PrintRangeTo=.txtTo.Value
开始页号必须小于或等于终止页号!
ENDCASE
RELEASEThisform
关闭表单
7)报表的重绘设置
在调整表单大小时,表单中的对象会被重新绘制,这时候需要重新输出报表到表单的形状对象shpPreview中,否则,重绘后的形状对象中将不再有报表显示。
在表单的Paint事件中加入下列代码,用于重绘时的报表输出。
IFVARTYPE(.oListener)="
.oListener.OutputPage(.nCurrentPage,.shpPreview,2)
8)表单关闭设置
在表单关闭前,首先要释放ReportListener的PreviewContainer属性对报表预览程序对象的引用,否则,该表单无法关闭。
在表单的QueryUnload事件中包含有下列代码,当单击表单标题栏的关闭框时,将执行该事件中的代码。
IFVARTYPE(This.oListener)='
释放对报表预览程序对象的引用
.oListener.OnPreviewClose(.F.)
关闭预览
表单中“关闭”按钮的Click事件与表单的QueryUnload事件代码基本相同,如下所示。
IFVARTYPE(Thisform.oListener)='
Thisform.oListener.PreviewContainer=.NULL.
Thisform.oListener.OnPreviewClose(.F.)
Thisform.oListener=.NULL.
RELEASEThisform
至此,这个报表预览程序就设计完毕了,使用这个报表预览程序进行输出的代码如下:
指定预览程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建立 自己 报表 预览 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)