




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 引言 在笔者开发的“学籍管理系统”中,有一数据查询模块,其任务是查询与浏览设定条件的学生或班级数据,其中的“打印”按钮功能是将显示在表格中的内容打印出来。由于查询结果中表与字段的是不固定的,使得利用VB本身自带的数据库报表难以实现动态打印,笔者经过对MSHFlexGrid控件、Printer对象的较深入学习、研究,遵循WINDOWS“所见即所得”的思想,有机结合二者编写程序,实现了既能显示查询数据,又能根据MSHFlexGrid控件中的内容的实际大小进行快捷输出,总体效果良好。1控件与打印技术简介11 MSHFlexGrid控件 Microsoft Hierarchical FlexGrid (MSHFlexGrid) 控件提供了类似EXCEL电子表格的功能,控件可对表格中数据进行显示和操作,并且在对包含字符串和图片的表格进行分类、合并以及格式化时,具有很强的灵活性。 MSHFlexGrid 控件中的 Cols 和 Rows 属性决定了MSHFlexGrid 控件中的列数和行数,Row 和 Col 属性指定了当前单元格,使用鼠标或者方向键可改变单元格的位置,TextMatrix(i, j)属性为显示网格中i行j列位置的文本内容,可进行读写赋值,表中单元格的列宽、行高分别由ColWidth 和RowHeight 属性进行设定。MSHFlexGrid控件可用鼠标拖动实现对选中的行列进行行高、列宽的调整,也可通过编写过程对表进行行高与列宽的统一设置。12 打印技术 VB提供了三种技术用于打印正文和图形:在窗体中建立所需要的输出,然后调用 PrintForm 方法打印窗体。先设置 Printers 集合中的缺省打印机,再传送正文和图形到打印机。先传送正文和图形给Printer对象,再进行打印输出。 因为Printer 对象是一个与设备无关的图片空间,支持用Print、PSet、Line、PaintPicture和Circle方法来创建文本和图形,并将文本和图形与打印机的分辨率、功能进行了最佳的匹配,所以针对不同类型的打印机,Printer对象提供最好的打印质量。 采用 Printer 对象打印输出,主要需设置 CurrentX 和 CurrentY 属性,这两个属性决定 Printer 对象当前页中的输出位置,如果打印文档内容较多时,则用NewPage方法进行换页处理,最后用EndDoc方法结束文档的打印。2实现思想 假设需打印的内容通过查询已显示在MSHFlexGrid控件中(如图)。由于MSHFlexGrid行列值(ColWidth、RowHeight )与Printer对象在输出时默认行列值单位一致的,所以报表输出只要结合A4纸的尺寸大小,统计出在MSHFlexGrid控件中的内容所需页数、每页的行、列位置,然后调用打印过程。 窗体打印过程Print_Grid1:根据MSHFlexGrid控件中行高、列宽及行列数,计算出每页开始与结束的行、列位置及行、列方向所需的页数,总的页数为行列方向页数相乘的积,然后以求得的每页开始与结束的行、列位置为参数调用打印过程Print_Grid2。 过程Print_Grid2:为单页打印,利用Printer对象,通过Print_Grid1的多次调用本过程,可将MSHFlexGrid控件上的数据逐页全部打印输出。3 程序代码31 全部页码打印程序Private Sub Print_Grid1() Dim row(50), Col(50) As Integer 存放每页开始的行、列序号Dim PageRow, PageCol 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 PageRow = 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) = .Cols 按先行后列打印,总页数为PageRowPageCol 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 第 & 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, ByVal EndRow As Integer, _ ByVal StartCol As Integer, ByVal EndCol As Integer)Dim 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 = 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) 各行数据,表格线 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) For j =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泡沫金属结构设计-洞察及研究
- 国际辅具标准对比研究-洞察及研究
- 出生缺陷评审课件
- 兰溪辅警考试题库2025(有答案)
- 2025届毕业生如何签订合法劳动合同
- 2025关于标准租房合同模板下载
- 2025合作经营合同
- 冲压车间安全培训课件
- 2025天然气购销合同书
- 2025教育机构师资合同模板下载
- 连锁经营管理理论与实务(全)
- 高考688个高频词汇 word版
- GB/T 9115.4-2000环连接面对焊钢制管法兰
- CAK-13CNC不落轮镟床维修指引
- 项目融资概述课件
- DB225118-2022建筑工程资料管理标准
- 不良资产尽职调查清单
- 小学语文口语交际教学讲座PPT
- 中国电力优质工程奖评审办法
- 体能训练概论(NSCA)
- GB 38600-2019 养老机构服务安全基本规范
评论
0/150
提交评论