📄 printerpro.bas
字号:
Attribute VB_Name = "PrinterPro"
''''''''''''''''''''
''打印表格
Public Const JP_PRINT_EVERYPAGE = 30 ''每页行数
Public Const JP_PRINT_SPOSX = 800 ''表格开始的X坐标
Public Const JP_PRINT_SPOSY = 1400 ''表格开始的Y坐标
Public Const JP_PRINT_LINEOFFX = 30 ''格子线离字的距离
Public Const JP_PRINT_LINEOFFY = 30
Public Const JP_PRINT_ROWHEIGTH = 240 ''格子的行高
Public Const JP_PRINT_COLUMNFONT = 8 ''列表名称字体大小
Public Const JP_PRINT_CONTECTFONT = 8 ''列表内容字体大小
Public Const JP_PRINT_TITLEFONT = 18 ''标题字体大小
Public Const JP_PRINT_TITLEPOSX = 6000 ''标题的X坐标
Public Const JP_PRINT_TITLEPOSY = 700 ''标题的Y坐标
''''''''''''''''''''
''''''打印机结构
Type typePrinterData
Title As String '标题
' TitlePosX As Integer '标题坐标X
' TitlePosY As Integer '标题坐标Y
' TitleFontSize As Integer '标题字体
Cols As Integer 'COLS数量
End Type
Public prntValue As typePrinterData
Public Function prnt1(x As Integer, y As Integer, font As Single, txt As String, Optional fb As Boolean = False)
Printer.CurrentX = x
Printer.CurrentY = y
Printer.FontBold = fb
Printer.FontSize = font
Printer.Print txt
End Function
'''''''''''''''''''''
Public Function SetPrinterValue(flag As Integer)
Select Case flag
Case JP_TX_ITEM1:
prntValue.Title = "预订生日信息"
prntValue.Cols = JP_YDSTR_COLS - 1
Case JP_TX_ITEM2:
prntValue.Title = "最近生日信息"
prntValue.Cols = JP_ZJSRSTR_COLS - 1
Case JP_TX_ITEM3:
prntValue.Title = "基本资料信息"
prntValue.Cols = JP_SET_MBVIEW_COLS - 1
Case JP_TX_ITEM4:
prntValue.Title = "完成生日信息"
prntValue.Cols = JP_SET_MFVIEW_COLS - 1
End Select
End Function
Public Function PrinterYD(msfg As MSFlexGrid, flag As Integer, nCount As Integer)
Dim fnt As Single
Dim pp As Integer
'PrinterDialog.Show
'WaitDelay (1)
pp = 0
Dim stry, strx, strx1, stry1, linw, page1, p, offx, offy As Integer
'Dim a(10) As Integer
SetPrinterValue (flag)
ReDim a(prntValue.Cols) As Integer
kan = 0
For i = 0 To prntValue.Cols
a(i) = msfg.ColWidth(i)
kan = kan + a(i)
Next
'JP_PRINT_EVERYPAGE = 25 '每页行数
strx = JP_PRINT_SPOSX 'X轴开始坐标
strx1 = JP_PRINT_SPOSX 'X轴开始坐标
stry = JP_PRINT_SPOSY 'Y轴开始坐标
stry1 = JP_PRINT_SPOSY 'Y轴开始坐标
linw = JP_PRINT_ROWHEIGTH '每行高度
fnt = JP_PRINT_CONTECTFONT '文本字体
offx = JP_PRINT_LINEOFFX 'OFFSITX
offy = JP_PRINT_LINEOFFY
Printer.FontName = "宋体"
Printer.PaperSize = vbPRPSA4
Printer.Orientation = vbPRORLandscape
'''''''''''''''
''标题
dd = prnt1(JP_PRINT_TITLEPOSX, JP_PRINT_TITLEPOSY, JP_PRINT_TITLEFONT, prntValue.Title) '标题设置
''''''''''''''''''''''''''
'''内容开始
Printer.Line (strx - offx, stry - offy)-(strx + kan - offx, stry - offy)
msfg = PrinterColumn(msfg, CInt(kan), a)
stry = stry + linw
If nCount > 0 Then
For j = 1 To nCount '''''''
msfg.Row = j
strx = strx1
Printer.Line (strx - offx, stry - offy)-(strx + kan - offx, stry - offy)
p = p + 1 '第p行
'写一行
For i = 0 To prntValue.Cols
msfg.Col = i
dd = prnt1(CInt(strx), CInt(stry), fnt, msfg.text)
strx = strx + a(i)
Next
'是否到达一页总行数
If p > JP_PRINT_EVERYPAGE - 1 Then
'超过一页
p = 0
strx = strx1
Printer.Line (strx - offx, stry + linw)-(strx + kan - offx, stry + linw - offy)
''''''划竖线
stry = stry1
For n = 0 To prntValue.Cols
Printer.Line (strx - offx, stry - offy)-(strx - offx, stry + (JP_PRINT_EVERYPAGE + 1) * linw - offy)
strx = strx + a(n)
Next
Printer.Line (strx - offx, stry - offy)-(strx - offx, stry + (JP_PRINT_EVERYPAGE + 1) * linw - offy)
pp = pp + 1
foot$ = "第 " + CStr(pp) + " 页"
dd = prnt1(strx - offx - 1000, stry + (JP_PRINT_EVERYPAGE + 1) * linw + 100, 10, foot$)
'新一页
Printer.NewPage
'''''标题
dd = prnt1(JP_PRINT_TITLEPOSX, JP_PRINT_TITLEPOSY, JP_PRINT_TITLEFONT, prntValue.Title)
msfg = PrinterColumn(msfg, CInt(kan), a)
' p = p + 1
stry = stry + linw
' j = j - 1
Else
'换行
stry = stry + linw
End If
Next
End If
'在剩余页印划空行
'st = stry
If p < JP_PRINT_EVERYPAGE Then
For o = p To JP_PRINT_EVERYPAGE
strx = strx1
Printer.Line (strx - offx, stry - offy)-(strx + kan - offx, stry - offy)
stry = stry + linw
Next
End If
'Printer.Line (strx - offx, stry - offy)-(strx + kan - offx, stry - offy)
strx = strx1
stry = stry1
'''''''''''''''
''划竖线
For n = 0 To prntValue.Cols
Printer.Line (strx - offx, stry - offy)-(strx - offx, stry + (JP_PRINT_EVERYPAGE + 1) * linw - offy)
strx = strx + a(n)
Next
Printer.Line (strx - offx, stry - offy)-(strx - offx, stry + (JP_PRINT_EVERYPAGE + 1) * linw - offy)
pp = pp + 1
foot$ = "第 " + CStr(pp) + " 页"
dd = prnt1(strx - offx - 1000, stry + (JP_PRINT_EVERYPAGE + 1) * linw + 100, 10, foot$)
If flag = JP_TX_ITEM4 Then
PrintTxitem4Text JP_PRINT_SPOSX, stry + (JP_PRINT_EVERYPAGE + 1) * linw + 100, JP_PRINT_COLUMNFONT, ReportView.Label1.Caption
End If
Printer.EndDoc
PrinterYD = msfg
'PrinterDialog.Caption = "打印完成!"
'Unload PrinterDialog
End Function
''''''''''''''''''''''
''''打印栏目
Public Function PrinterColumn(msfg As MSFlexGrid, kan As Integer, a() As Integer)
msfg.Row = 0
Dim strx, stry, offx, offy As Integer
strx = JP_PRINT_SPOSX 'X轴开始坐标
stry = JP_PRINT_SPOSY 'Y轴开始坐标
offx = JP_PRINT_LINEOFFY 'OFFSITX
offy = JP_PRINT_LINEOFFY
Printer.Line (strx - offx, stry - offy)-(strx + kan - offx, stry - offy)
'写一行
For i = 0 To prntValue.Cols
msfg.Col = i
dd = prnt1(CInt(strx), CInt(stry), JP_PRINT_COLUMNFONT, msfg.text, True)
strx = strx + a(i)
Next
PrinterColumn = msfg
End Function
'''''''''''''''''''''''''
''''''''打印JP_TX_ITEM4的统计文本
Public Function PrintTxitem4Text(x As Integer, y As Integer, font As Integer, text As String)
Dim n As Long
Dim str As String
n = InStr(1, text, Chr(10))
If n = 0 Or n = Null Then
prnt1 x, y, CInt(font), text
Else
str = Left$(text, n)
prnt1 x, y, CInt(font), str
text = Mid$(text, n + 1)
y = y + JP_PRINT_ROWHEIGTH
PrintTxitem4Text x, y, font, text
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -