⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prt_gz.bas

📁 看了就知道看了就知道看了就知道看了就知道看了就知道看了就知道看了就知道看了就知道看了就知道
💻 BAS
字号:
Attribute VB_Name = "Prt_Gz"
Option Explicit
'以工资条格式打印Fg控件的过程
'使用9号A4纸纵向打印
'以默认的缇为单位。
'A4纸的宽为:11904  高为:16838   减去 页眉页脚(1655) 剩余15200 可用
'每个单元格高 800,宽1100
'每张纸可容纳 15000/800 = x 18 行单元格
'每行可容纳 10 列单元格

Public Sub PrtFg_Gz(ByVal Prt As Object, ByVal PageNo As Long, fg As MSHFlexGrid)
Dim i As Long, j As Long
'打印内容
Dim 大标题 As String
Dim 小标题 As String
Dim 制表单位 As String
Dim 发放日期 As String
Dim 制表人 As String
Dim 打印日期 As String

Dim 边距 As Single
Dim NowY As Single '当前行坐标

边距 = 5 * 56.7

大标题 = "工资发放表"
小标题 = "工资期间:2004-10-01 至 2004-11-01"
制表单位 = "控件测试"

发放日期 = "发放日期:2004-10-03"
制表人 = "制表人:独孤求败"


'开始打印


    '打印大标题...
    Prt.FontName = "宋体" '设置字体格式
    Prt.FontBold = True
    Prt.FontSize = 12 '设置大标题大小
    Prt.CurrentY = 边距 '设置标题位置
    Prt.CurrentX = Prt.ScaleWidth / 2 - Prt.TextWidth(大标题) / 2 '大标题居中
    
    If PageNo = 1 Then '首页打印标题
        Prt.Print 大标题
    Else
        Prt.Print " "
    End If
    
    '打印制表单位,小标题,页码
    '设置当前行坐标
    NowY = Prt.CurrentY + Prt.TextHeight("换行")
    '换行
    Prt.CurrentY = NowY
    '改变字体设置
    Prt.FontBold = False
    Prt.FontSize = 10 '设置字体大小
    Prt.DrawWidth = 1 '设置线段宽度
    Prt.CurrentX = 边距
    Prt.Print 制表单位 '打印制表单位
    Prt.CurrentY = NowY
    Prt.CurrentX = Prt.ScaleWidth / 2 - Prt.TextWidth(小标题) / 2 '小标题居中
    Prt.Print 小标题 '打印小标题
    Prt.CurrentY = NowY
    Prt.CurrentX = Prt.ScaleWidth - 边距 - Prt.TextWidth("页码:9999")
    Prt.Print "页码:" & PageNo  '打印页码
    
    '开始打印 表格形式的工资条
    NowY = Prt.CurrentY + Prt.TextHeight("换行")
    '换行
    Prt.CurrentY = NowY
    Prt.CurrentX = 边距
    '确定打印一行所需的行高
    Dim 行高 As Long
    '确定打印一页所需的行数
    Dim 行数 As Long
    '确定总页数
    Dim 总页数 As Long
    
    Get总页数 fg, 行高, 行数, 总页数
    
    Dim 列计数 As Long '用来计算判断当前列的数量是否填满一行
    
    '开始枚举打印所有行
    For i = 1 To 行数
        '第i行
        For j = 0 + fg.FixedCols To fg.Cols - 1 '第j列
            If j = 0 Then '首列左对齐
                PrtB Prt, Prt.CurrentX, Prt.CurrentY, fg.TextMatrix(0, j), fg.TextMatrix(i + (PageNo - 1) * 行数, j), False
            Else
                PrtB Prt, Prt.CurrentX, Prt.CurrentY, fg.TextMatrix(0, j), fg.TextMatrix(i + (PageNo - 1) * 行数, j), True
            End If
            
            列计数 = 列计数 + 1
            If 列计数 = 10 Or j = fg.Cols - 1 Then '填写满10列后,或填满所有列后自动换行
                列计数 = 0
                Prt.CurrentX = 边距
                Prt.CurrentY = Prt.CurrentY + 800
            End If
            
            '填满所有列后画线
            If j = fg.Cols - 1 Then
                PrtLine Prt, Prt.CurrentX, Prt.CurrentY '画分割线
            End If
        Next
        
        If i + (PageNo - 1) * 行数 >= fg.Rows - 1 Then '判断当前行是否为最后一行
            Exit For
        End If
    Next
    
    '添加页尾的制表人和发放日期
    NowY = Prt.CurrentY + 200
    Prt.CurrentY = NowY
    Prt.Print 制表人
    Prt.CurrentY = NowY
    Prt.CurrentX = Prt.ScaleWidth - 边距 - Prt.TextWidth(发放日期)
    Prt.Print 发放日期
    
    '打印完毕...
    
End Sub

'子过程,打印一个单元格及其标题、内容
Private Sub PrtB(ByVal Prt As Object, ByVal X As Single, ByVal Y As Single, ByVal 标题 As String, ByVal 内容, Optional ByVal 右对齐 As Boolean)
    '首先打印标题
    '确定坐标
    Prt.CurrentX = X + 1100 / 2 - Prt.TextWidth(标题) / 2 '标题居中
    Prt.CurrentY = Y + 130
    Prt.Print 标题 '打印标题
    
    '然后打印内容
    '确定坐标
    If 右对齐 = True Then
    Prt.CurrentX = X + 1100 - Prt.TextWidth(内容) - 50 '内容对齐方式
    Else
    Prt.CurrentX = X + 50 '内容对齐方式
    End If
    Prt.CurrentY = Y + 400 + 130
    Prt.Print 内容 '打印内容
    
    '最后打印单元格
    Prt.Line (X, Y)-(X + 1100, Y + 400), , B
    Prt.Line (X, Y + 400)-(X + 1100, Y + 400 * 2), , B
    
    '打印完毕后,返回当前坐标
    Prt.CurrentX = X + 1100
    Prt.CurrentY = Y
    
End Sub

'子过程,打印一条分割线(虚线)
Private Sub PrtLine(ByVal Prt As Object, ByVal X As Single, ByVal Y As Single)
    Prt.DrawStyle = 3
    Prt.Line (X, Y + 200)-(Prt.ScaleWidth - X, Y + 200)
    Prt.CurrentX = X
    Prt.CurrentY = Y + 400 '确定当前坐标
    Prt.DrawStyle = 0
End Sub

Public Function Get总页数(ByVal fg As MSHFlexGrid, ByRef 行高 As Long, ByRef 行数 As Long, ByRef 总页数 As Long) As Boolean '根据Fg内容获得总页数的函数
    '确定打印一行所需的行高
    If (fg.Cols - fg.FixedCols) Mod 10 > 0 Then
        行高 = 1
    Else
        行高 = 0
    End If
    行高 = (fg.Cols - fg.FixedCols) \ 10 + Val(行高)
    行高 = 行高 * 800 + 400
    
    '确定打印一页所需的行数
    行数 = 15200 \ 行高

    '总行数 / 每页的行数就是总页数
    If (fg.Rows - 1) Mod 行数 > 0 Then
        总页数 = 1
    Else
        总页数 = 0
    End If
    总页数 = (fg.Rows - 1) \ 行数 + 总页数
    Get总页数 = True
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -