龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

基于VB-PRINTER对象的动态报表打印[图](2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
由于MSHFlexGrid行列值(ColWidth、RowHeight )与Printer对象在输出时默认行列值单位一致的,所以报表输出只要结合A4纸的尺寸大小,统计出在MSHFlexGrid控件中的

   由于MSHFlexGrid行列值(ColWidth、RowHeight )与Printer对象在输出时默认行列值单位一致的,所以报表输出只要结合A4纸的尺寸大小,统计出在MSHFlexGrid控件中的内容所需页数、每页的行、列位置,然后调用打印过程。

   窗体打印过程Print_Grid1:根据MSHFlexGrid控件中行高、列宽及行列数,计算出每页开始与结束的行、列位置及行、列方向所需的页数,总的页数为行列方向页数相乘的积,然后以求得的每页开始与结束的行、列位置为参数调用打印过程Print_Grid2。

   过程Print_Grid2:为单页打印,利用Printer对象,通过Print_Grid1的多次调用本过程,可将MSHFlexGrid控件上的数据逐页全部打印输出。

  3  程序代码

  3.1   全部页码打印程序

Private Sub Print_Grid1() 
Dim row(50), Col(50) As Integer   '存放每页开始的行、列序号
Dim PageRow, PageCol As Integer  '行、列方向所需的页数
Dim i, j, n, L As Integer
With 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
    '按先行后列打印,总页数为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 "第 " & n & " 页"
            End If
            Printer.NewPage
        Next j
    Next i
End With
Printer.EndDoc
End Sub

精彩图集

赞助商链接