基于vb-printer对象的动态报表打印

基于vb-printer对象的动态报表打印

ID:12553137

大小:56.50 KB

页数:6页

时间:2018-07-17

基于vb-printer对象的动态报表打印_第1页
基于vb-printer对象的动态报表打印_第2页
基于vb-printer对象的动态报表打印_第3页
基于vb-printer对象的动态报表打印_第4页
基于vb-printer对象的动态报表打印_第5页
资源描述:

《基于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+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。