版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0 引言 在笔者开发的“学籍管理系统”中,有一数据查询模块,其任务是查询与浏览设定条件的学生或班级数据,其中的“打印”按钮功能是将显示在表格中的内容打印出来。由于查询结果中表与字段的是不固定的,使得利用VB本身自带的数据库报表难以实现动态打印,笔者经过对MSHFlexGrid控件、Printer对象的较深入学习、研究,遵循WINDOWS“所见即所得”的思想,有机结合二者编写程序,实现了既能显示查询数据,又能根据MSHFlexGrid控件中的内容的实际大小进行快捷输出,总体效果良好。1控件与打印技术简介11 MSHFlexGrid控件 Microsoft Hierarchical FlexGri
2、d (MSHFlexGrid 控件提供了类似EXCEL电子表格的功能,控件可对表格中数据进行显示和操作,并且在对包含字符串和图片的表格进行分类、合并以及格式化时,具有很强的灵活性。 MSHFlexGrid 控件中的 Cols 和 Rows 属性决定了MSHFlexGrid 控件中的列数和行数,Row 和 Col 属性指定了当前单元格,使用鼠标或者方向键可改变单元格的位置,TextMatrix(i, j属性为显示网格中i行j列位置的文本内容,可进行读写赋值,表中单元格的列宽、行高分别由ColWidth 和RowHeight 属性进行设定。MSHFlexGrid控件可用鼠标拖动实现对选中的行列进行
3、行高、列宽的调整,也可通过编写过程对表进行行高与列宽的统一设置。12 打印技术 VB提供了三种技术用于打印正文和图形:在窗体中建立所需要的输出,然后调用 PrintForm 方法打印窗体。先设置 Printers 集合中的缺省打印机,再传送正文和图形到打印机。先传送正文和图形给Printer对象,再进行打印输出。 因为Printer 对象是一个与设备无关的图片空间,支持用Print、PSet、Line、PaintPicture和Circle方法来创建文本和图形,并将文本和图形与打印机的分辨率、功能进行了最佳的匹配,所以针对不同类型的打印机,Printer对象提供最好的打印质量。 采用 Prin
4、ter 对象打印输出,主要需设置 CurrentX 和 CurrentY 属性,这两个属性决定 Printer 对象当前页中的输出位置,如果打印文档内容较多时,则用NewPage方法进行换页处理,最后用EndDoc方法结束文档的打印。2实现思想 假设需打印的内容通过查询已显示在MSHFlexGrid控件中(如图)。由于MSHFlexGrid行列值(ColWidth、RowHeight )与Printer对象在输出时默认行列值单位一致的,所以报表输出只要结合A4纸的尺寸大小,统计出在MSHFlexGrid控件中的内容所需页数、每页的行、列位置,然后调用打印过程。 窗体打印过程Print_Grid
5、1:根据MSHFlexGrid控件中行高、列宽及行列数,计算出每页开始与结束的行、列位置及行、列方向所需的页数,总的页数为行列方向页数相乘的积,然后以求得的每页开始与结束的行、列位置为参数调用打印过程Print_Grid2。 过程Print_Grid2:为单页打印,利用Printer对象,通过Print_Grid1的多次调用本过程,可将MSHFlexGrid控件上的数据逐页全部打印输出。3 程序代码31 全部页码打印程序Private Sub Print_Grid1( Dim row(50, Col(50 As Integer '存放每页开始的行、列序号Dim PageRow, Pag
6、eCol As Integer '行、列方向所需的页数Dim i, j, n, L As IntegerWith MSHFlexGrid1 '确定每页行开始、结束位置,行方向需要的页数 PageRow = 0: L = .RowHeight(0: row(PageRow = 1 For i = 1 To .Rows - 1 L = L + .RowHeight(i If L > 14000 Then PageRow = PageRow + 1 row(PageRow = i L = .RowHeight(i + .RowHeight(0 End If Next i Pag
7、eRow = PageRow + 1: row(PageRow = .Rows '确定每页列开始、结束位置,列方向需要的页数 PageCol = 0: L = .ColWidth(0: Col(PageCol = 1 For j = 1 To .Cols - 1 L = L + .ColWidth(j If L > 10500 Then PageCol = PageCol + 1 Col(PageCol = j L = .ColWidth(j + .ColWidth(0 End If Next j PageCol = PageCol + 1: Col(PageCol = .Col
8、s '按先行后列打印,总页数为PageRow×PageCol n = 0 For i = 1 To PageRow For j = 1 To PageCol '调用打印一页过程,参数为开始行、列,结束行、列 Print_Grid2 row(i - 1, row(i - 1, Col(j - 1, Col(j - 1 If PageRow + PageCol > 2 Then '若页数大于2,右下角打印页码 n = n + 1 Printer.CurrentX = 10000: Printer.CurrentY = 15500 Printer.Print
9、"第 " & n & " 页" End If Printer.NewPage Next j Next iEnd WithPrinter.EndDocEnd Sub' 注:因为打印是以缇为单位的,1厘米=567缇,A4纸大小29.7厘米21厘米,所以转换为缇为单位的大小是16839.9缇×11907缇,打印中横、纵向不能超过这二个数,上面程序设定横不超边14000缇,纵不超过10500缇,用变量L表示32 打印单页过程Private Sub Print_Grid2(ByVal StartRow As Integer, By
10、Val EndRow As Integer, _ ByVal StartCol As Integer, ByVal EndCol As IntegerDim Px, Py, x1, y1, i, j As IntegerDim L As Long, W As Longx1 = 1000 : y1 = 1000 '设定表格线的左上基准点坐标位置,单位为缇Px = 100 : Py = 50 '设置打印的数据离左表格线、上表格线的距离With MSHFlexGrid1 '打印第一行 Printer.CurrentX = x1 + Px Printer.CurrentY =
11、y1 + Py Printer.Print .TextMatrix(0, 0 W = .ColWidth(0 For j = StartCol To EndCol Printer.CurrentX = x1 + W + Px Printer.CurrentY = y1 + Py Printer.Print .TextMatrix(0, j W = W + .ColWidth(j Next j L = .RowHeight(0 Printer.Line (x1, y1-(x1 + W, y1 Printer.Line (x1, y1 + L-(x1 + W, y1 + L '各行数据,表
12、格线 For i = StartRow To EndRow Printer.CurrentX = x1 + Px '第一列 Printer.CurrentY = y1 + L + Py Printer.Print .TextMatrix(i, 0 W = .ColWidth(0 For j = StartCol To EndCol Printer.CurrentX = x1 + W + Px Printer.CurrentY = y1 + L + Py Printer.Print .TextMatrix(i, j W = W + .ColWidth(j Next j L = L + .RowHeight(i Printer.Line (x1, L + y1-(x1 + W, L + y1 Next i '竖线打印 Printer.Line (x1, y1-(x1, L + y1 W = 0 W = W + .ColWidth(0 Printer.Line (x1 + W, y1-(x1 + W, L + y1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级下册北师大版英语单项选择(50题)
- 初二年级上册册数学知识点总结(北师大版)
- 北京市各区2026届中考历史模拟预测题含解析
- 2026届北京市东城区第166中学中考联考英语试题含答案
- 健康社区规章制度
- 2026 学龄前自闭症日常认知课件
- 2026 学龄前自闭症情绪策略应用课件
- 《中药学(第2版)》课件23- 开窍药
- 小考动员大会发言稿
- 2026年外协加工管控工作计划
- 普通高中美术课程标准(2017年版2025年修订)
- 赤子城科技-市场前景及投资研究报告-全球化社交娱乐公司灌木丛矩阵出海壁垒
- 焊接车间机器人焊接路径标准规范
- 2026四川广安市前锋区社区工作者招聘43人笔试模拟试题及答案解析
- 2026上海市众仁慈善服务中心招聘20人备考题库含答案详解(夺分金卷)
- 2026年北京西城区高三一模化学试卷及答案
- 雨课堂学堂在线学堂云《人工智能安全与伦理(北京航空航天)》单元测试考核答案
- 《国际商法》课件
- 消渴目病相关讲座
- JT-T-939.2-2014公路LED照明灯具第2部分:公路隧道LED照明灯具
- 视频监控维保项目投标方案(技术标)
评论
0/150
提交评论