欢迎来到天天文库
浏览记录
ID:12553137
大小:56.50 KB
页数:6页
时间:2018-07-17
《基于vb-printer对象的动态报表打印》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、0 引言 在笔者开发的“学籍管理系统”中,有一数据查询模块,其任务是查询与浏览设定条件的学生或班级数据,其中的“打印”按钮功能是将显示在表格中的内容打印出来。由于查询结果中表与字段的是不固定的,使得利用VB本身自带的数据库报表难以实现动态打印,笔者经过对MSHFlexGrid控件、Printer对象的较深入学习、研究,遵循WINDOWS“所见即所得”的思想,有机结合二者编写程序,实现了既能显示查询数据,又能根据MSHFlexGrid控件中的内容的实际大小进行快捷输出,总体效果良好。 1 控件与打印技术简介 1.1 M
2、SHFlexGrid控件 MicrosoftHierarchicalFlexGrid(MSHFlexGrid)控件提供了类似EXCEL电子表格的功能,控件可对表格中数据进行显示和操作,并且在对包含字符串和图片的表格进行分类、合并以及格式化时,具有很强的灵活性。 MSHFlexGrid控件中的Cols和Rows属性决定了MSHFlexGrid控件中的列数和行数,Row和Col属性指定了当前单元格,使用鼠标或者方向键可改变单元格的位置,TextMatrix(i,j)属性为显示网格中i行j列位置的文本内容,可进行读写赋值,表中
3、单元格的列宽、行高分别由ColWidth和RowHeight属性进行设定。MSHFlexGrid控件可用鼠标拖动实现对选中的行列进行行高、列宽的调整,也可通过编写过程对表进行行高与列宽的统一设置。 1.2 打印技术 VB提供了三种技术用于打印正文和图形: ①在窗体中建立所需要的输出,然后调用PrintForm方法打印窗体。 ②先设置Printers集合中的缺省打印机,再传送正文和图形到打印机。 ③先传送正文和图形给Printer对象,再进行打印输出。 因为Printer对象是一个与设备无关的图片空间,支持用Pri
4、nt、PSet、Line、PaintPicture和Circle方法来创建文本和图形,并将文本和图形与打印机的分辨率、功能进行了最佳的匹配,所以针对不同类型的打印机,Printer对象提供最好的打印质量。 采用Printer对象打印输出,主要需设置CurrentX和CurrentY属性,这两个属性决定Printer对象当前页中的输出位置,如果打印文档内容较多时,则用NewPage方法进行换页处理,最后用EndDoc方法结束文档的打印。 2 实现思想 假设需打印的内容通过查询已显示在MSHFlexGrid控件中(如图)
5、。由于MSHFlexGrid行列值(ColWidth、RowHeight)与Printer对象在输出时默认行列值单位一致的,所以报表输出只要结合A4纸的尺寸大小,统计出在MSHFlexGrid控件中的内容所需页数、每页的行、列位置,然后调用打印过程。 窗体打印过程Print_Grid1:根据MSHFlexGrid控件中行高、列宽及行列数,计算出每页开始与结束的行、列位置及行、列方向所需的页数,总的页数为行列方向页数相乘的积,然后以求得的每页开始与结束的行、列位置为参数调用打印过程Print_Grid2。 过程Print_
6、Grid2:为单页打印,利用Printer对象,通过Print_Grid1的多次调用本过程,可将MSHFlexGrid控件上的数据逐页全部打印输出。 3 程序代码 3.1 全部页码打印程序PrivateSubPrint_Grid1() Dimrow(50),Col(50)AsInteger '存放每页开始的行、列序号DimPageRow,PageColAsInteger '行、列方向所需的页数Dimi,j,n,LAsIntegerWithMSHFlexGrid1 '确定每页行开始、结束位置,行方向需要的页数
7、PageRow=0:L=.RowHeight(0):row(PageRow)=1 Fori=1To.Rows-1 L=L+.RowHeight(i) IfL>14000Then PageRow=PageRow+1 row(PageRow)=i L=.RowHeight(i)+.RowHeight(0) EndIf Nexti PageRow=PageRow+1:row(PageRow)=.Rows '确定每页列开
8、始、结束位置,列方向需要的页数 PageCol=0:L=.ColWidth(0):Col(PageCol)=1 Forj=1To.Cols-1 L=L+.ColWidth(j) IfL>10500Then PageCol=PageCol+
此文档下载收益归作者所有