📄 系统_打印基本模块.bas
字号:
Attribute VB_Name = "DyjbModule"
'**********************************************
'* 模 块 名 称 :打印基本模块
'* 功 能 描 述 :
'* 程序员姓名 : 张建忠
'* 最后修改人 : 张建忠
'* 最后修改时间:2001/07/25
'* 备 注:
'**********************************************
Public XtReportCode As String '传递打印报表编码
Public Sub Scdybb(Dyymctbl As Form, Bbzbt$, Bbxbt() As String, bbxbtzzxs() As Integer, Bbxbtgs As Integer, Bbbwh() As String, Bbbwhzzxs() As Integer, Bbbwhgs As Integer, bbylte As Boolean, Optional PrintMessageNotShow As Boolean) '生 成 打 印 报 表
'函数参数为:打印页面设置窗体变量,报表主标题,报表小标题数组,报表小标题组织形式,报表小标题个数,报表表尾行数组,报表表尾行组织形式,报表表尾行行数,是预览还是直接打印(选择项),打印时打印选择项窗体是否显示(主要为了支持连续打印)
'程 序 运 行 临 时 变 量
Dim Bbbtkd$, Bbbody$, Bbydx#, Bbydy#, Bbqsx# '报表标题宽度,表体,移动X,移动Y,报表左边界(报表起始X坐标)
Dim Rowjsq%, Coljsq%, Byhjsq% '网格行列计数器,本页行计数器
Dim Bbzkd#, Btzgd#, Bwzgd#, Btkdte#, Btsjhgd#, MaxColwidth# '报表总宽度,标题总高度,报表表尾行高度,标题宽度,表头+n行数据行高度,报表最大列宽
Dim Bbhsjsq&, Bbhsjsqte&, Byzzh&, Bybbhs& '报表数据行数计数器,报表数据行数计数保存,报表终止行,本页报表行数
Dim Ztkd1#, Ztkd2#, Ztgd1#, Ztgd2# '不同字体高与宽
Dim Bbsjhgd#, Bbgdhgd#, Kdfdbl#, Gdfdbl# '报表数据行高度,固定行高度,表宽放大比例,表高放大比例
Dim Lszbj#, Bbpage$, Bbynfyh& '临时左边界,报表页号,报表页内分页号
Dim jsqte% '临时计数器
Dim bbQslz&, bbzzlz& '本页报表输出起始列值,本页报表输出终止列值
Dim Yxbbkd# '本页有效报表宽度
Dim Tsxx As String '系统提示信息
Dim Papername(1 To 70) As String '纸张大小对应描述
Dim Bbzys As Integer
Dim Sfdyfyh As Boolean '是否打印分页号
Dim Xbtmaxlen As Double '小标题最大长度
Dim Bwhmaxlen As Double '表尾行最大长度
'设计人员自定义变量(不让用户定义是为了保持系统打印一致性)
Dim Sckd#, Xhsjg#, Xbthjg#, zdxgd# '标题下划线缩进,下划线间隔,小标题表尾行间隔,装订线高度
Dim Zdxsjg#, Zdxzjg# '装订线上间隔,装订线左间隔
Dim Xbths%, Bwhs% '小标题行数,表尾行数
Dim Bbfzbl As String '报表分组输出条件
Dim Bwzb$, Bwbzdw$ '表尾制表人,报表编制单位
'用 户 自 定 义 变 量
Dim Bbgdscqsl&, Bbgdsczzl&, bbscQslz&, bbsczzlz& '报表固定输出起始列,报表固定输出终止列,报表输出起始列,报表输出终止列(报表起始列>报表固定输出终止列)
Dim Btfontsize&, Sjfontsize&, Btfontname$, Sjfontname$ '报表标题字体大小,数据区字体大小
Dim Pagecount%, Mybbhs&, Zdbbhs& '报表页数计数器,每页满页报表行数,用户指定报表行数
Dim Dyxsbz As Boolean, Sfmy As Boolean, Zdhs As Boolean '是否输出单元标志,表格满页控制,指定每页报表行数
Dim Bwdyrq$, Bwrjmc$ '打印日期,软件制作版本
Dim Bbalign$ '报表组织形式(1-居左,2-居中)
Dim zdxwz% '报表装订线位置
Dim sfsckb As Boolean '是否输出空表
Dim sfscgdl As Boolean '页内分页时是否输出固定列
Dim Sflxdy As Boolean '报表是否连续打印
Dim Sftdfssc As Boolean '是否套打方式输出
Dim Bjjghs As Integer '报表之间间隔
Dim Bbmcte As String '报 表 名 称
Dim Bbbxjg As Long '报表表线打印间隔
Papername(1) = "Letter, 8 1/2 x 11 英寸"
Papername(2) = "Letter Small, 8?x 11 英寸"
Papername(3) = "Tabloid, 11 x 17 英寸"
Papername(4) = "Ledger, 17 x 11 英寸"
Papername(5) = "Legal, 8 x 14 英寸"
Papername(6) = "Statement, 5 1/2 x 8 1/2 英寸"
Papername(7) = "Executive, 7 1/2 x 10 1/2 英寸"
Papername(8) = "A3 297 x 420 毫米"
Papername(9) = "A4 210 x 297 毫米"
Papername(10) = "A4 Small, 210 x 297 毫米"
Papername(11) = "A5, 148 x 210 毫米"
Papername(12) = "B4, 250 x 354 毫米"
Papername(13) = "B5, 182 x 257 毫米"
Papername(14) = "Folio, 8 x 13 英寸"
Papername(15) = "Quarto, 215 x 275 毫米"
Papername(16) = "10 x 14 英寸"
Papername(17) = "11x17 英寸"
Papername(18) = "Note 8 1/2 x 11 英寸"
Papername(19) = "Envelope #9 3 7/8 x 8 7/8"
Papername(20) = "Envelope #10 4 1/8 x 9 1/2"
Papername(21) = "Envelope #11 4 1/2 x 10 3/8"
Papername(22) = "Envelope #12 4 \276 x 11"
Papername(23) = "Envelope #14 5 x 11 1/2"
Papername(24) = "C size sheet"
Papername(25) = "D size sheet"
Papername(26) = "E size sheet"
Papername(27) = "Envelope DL 110 x 220毫米"
Papername(28) = "Envelope C5 162 x 229 毫米"
Papername(29) = "Envelope C3 324 x 458 毫米"
Papername(30) = "Envelope C4 229 x 324 毫米"
Papername(31) = "Envelope C6 114 x 162 毫米"
Papername(32) = "Envelope C65 114 x 229 毫米"
Papername(33) = "Envelope B4 250 x 353 毫米"
Papername(34) = "Envelope B5 176 x 250 毫米"
Papername(35) = "Envelope B6 176 x 125 毫米"
Papername(36) = "Envelope 110 x 230 毫米"
Papername(37) = "Envelope Monarch 3.875 x 7.5 英寸"
Papername(38) = "6 3/4 Envelope 3 5/8 x 6 1/2 英寸"
Papername(39) = "US Std Fanfold 14 7/8 x 11 英寸"
Papername(40) = "German Std Fanfold 8 1/2 x 12 英寸"
Papername(41) = "German Legal Fanfold 8 1/2 x 13 英寸"
Papername(42) = "B4 (ISO) 250 x 353 毫米"
Papername(43) = "Japanese Postcard 100 x 148 毫米"
Papername(44) = "9 x 11 英寸"
Papername(45) = "10 x 11 英寸"
Papername(46) = "15 x 11 英寸"
Papername(47) = "Envelope Invite 220 x 220 毫米"
Papername(48) = "" ' RESERVED--DO NOT USE
Papername(49) = "" ' RESERVED--DO NOT USE
Papername(50) = "Letter Extra 9 \275 x 12 英寸"
Papername(51) = "Legal Extra 9 \275 x 15 英寸"
Papername(52) = "Tabloid Extra 11.69 x 18 英寸"
Papername(53) = "A4 Extra 9.27 x 12.69 英寸"
Papername(54) = "Letter Transverse 8 \275 x 11 英寸"
Papername(55) = "A4 Transverse 210 x 297 毫米"
Papername(56) = "Letter Extra Transverse 9\275 x 12 英寸"
Papername(57) = "SuperA/SuperA/A4 227 x 356 毫米"
Papername(58) = "SuperB/SuperB/A3 305 x 487 毫米"
Papername(59) = "Letter Plus 8.5 x 12.69 英寸"
Papername(60) = "A4 Plus 210 x 330 毫米"
Papername(61) = "A5 Transverse 148 x 210 毫米"
Papername(62) = "B5 (JIS) Transverse 182 x 257 毫米"
Papername(63) = "A3 Extra 322 x 445 毫米"
Papername(64) = "A5 Extra 174 x 235 毫米"
Papername(65) = "B5 (ISO) Extra 201 x 276 毫米"
Papername(66) = "A2 420 x 594 毫米"
Papername(67) = "A3 Transverse 297 x 420 毫米"
Papername(68) = "A3 Extra Transverse 322 x 445 毫米"
'设计人员依系统情况而定数据(单位:像素点)
zdxgd = 700 '装订线高度
Sckd = 300 '标题下划线缩进宽度
Xhsjg = 50 '下划线间隔
Xbthjg = 150 '小标题及表尾与报表之间行间隔
Xbths = Bbxbtgs '小标题行数
Bwhs = Bbbwhgs + 3 '表尾行数
Bwzb = "制表:" + Xtczy
Bwbzdw = "【" + Xtdwm + "】"
'读入用户定义页面特殊设置
With Dyymctbl
'0-报表名称
Bbmcte = .BbmcLabel
'1-装订位置
For jsqte = 0 To 2
If .Zdoption(jsqte).Value Then
zdxwz = jsqte
Exit For
End If
Next jsqte
'2-是否满页打印
If .MydyCheck.Value = 1 Then
Sfmy = True
Else
Sfmy = False
End If
'3-对称页边距
If .BjdcCheck.Value = 1 Then
Bbalign = "2"
Else
Bbalign = "1"
End If
'4-用户指定报表行数
If .ZdhsCheck.Value = 1 Then
Zdhs = True
Zdbbhs = Val(.BbhsText)
Else
Zdhs = False
Zdbbhs = 0
End If
'5-无数据记录是否显示空表
If .KbscCheck = 1 Then
sfsckb = True
Else
sfsckb = False
End If
'6-报表起始页编号
Pagecount = 1
'7-页内换页是否输出固定列
If .GdscCheck = 1 Then
sfscgdl = True
Else
sfscgdl = False
End If
'8-读 入 报 表 标 题 及 表 体 字 体,字 号
Btfontname = .Btztlabel
Btfontsize = .Btzhlabel
Sjfontname = .SjztLabel
Sjfontsize = .Sjzhlabel
'9-读 入 报 表 输 出 列 情 况
Bbgdscqsl = 0
Bbgdsczzl = Dyymctbl.BbsclText
If sfscgdl Then
bbscQslz = Dyymctbl.BbsclText + 1
Else
bbscQslz = 0
End If
bbsczzlz = DY_Tybbyldy.DyylGrid.Cols - 1
'10-读入报表未满页是否连续打印
If Dyymctbl.LxscCheck = 1 Then
Sflxdy = True
Else
Sflxdy = False
End If
'11-报表是否套打方式输出
If Dyymctbl.TdfsCheck = 1 Then
Sftdfssc = True
Else
Sftdfssc = False
End If
'11-读入报表之间间隔(同时可以考虑表间可以加一下划线--页内折线)
Bjjghs = Val(Dyymctbl.Bjjglabel)
'12-读入报表表线打印间隔
Bbbxjg = Val(Dyymctbl.BxjgLabel)
End With
DY_Tybbyldy.Caption = "报表预览_" + Bbmcte '显示报表名称
With DY_Tybbyldy.Tydy
If DY_Tybbyldy.Tydy.NDevices <= 0 Then
Tsxx = "本机未安装任何打印机!"
Call Xtxxts(Tsxx, 0, 1)
Unload DY_Tybbyldy
Exit Sub
End If
'10-读入[页面设置]中VSprinter的信息
'包括打印机 , 输出方向, 来源, 左边界
'右边界,上边界,下边界,自定义纸张大小
.Device = Dyymctbl.YmszPrinter.Device
.Orientation = Dyymctbl.YmszPrinter.Orientation
.PaperBin = Dyymctbl.YmszPrinter.PaperBin
.MarginLeft = Dyymctbl.YmszPrinter.MarginLeft
.MarginRight = Dyymctbl.YmszPrinter.MarginRight
.MarginTop = Dyymctbl.YmszPrinter.MarginTop
.MarginBottom = Dyymctbl.YmszPrinter.MarginBottom
If Dyymctbl.YmszPrinter.PaperSize = pprUser Then
.PaperSize = pprUser
.PaperWidth = Dyymctbl.YmszPrinter.PageWidth
.PageHeight = Dyymctbl.YmszPrinter.PaperHeight
Else
.PaperSize = Dyymctbl.YmszPrinter.PaperSize
End If
'显示简单打印信息
DY_Tybbyldy.DYStatus.Panels(1).Text = "打印机:" + .Device
If .PaperSize >= 1 And .PaperSize <= 68 Then
DY_Tybbyldy.DYStatus.Panels(2).Text = "纸张大小:" + Papername(.PaperSize)
Else
DY_Tybbyldy.DYStatus.Panels(2).Text = "纸张大小:" + str(.PaperHeight) + " x " + str(.PaperWidth)
End If
If .Orientation = orLandscape Then
DY_Tybbyldy.DYStatus.Panels(3).Text = "输出方向:" + "横向"
Else
DY_Tybbyldy.DYStatus.Panels(3).Text = "输出方向:" + "纵向"
End If
Bbhsjsq = DY_Tybbyldy.DyylGrid.FixedRows
Bwdyrq = "打印日期:" + Format(Date, "yyyy.mm.dd")
Bwrjmc = "【新世纪/ERP】"
Sfdyfyh = False
.BrushStyle = bsTransparent
.StartDoc
'测 试 报 表 放 大 比 例
.FontName = DY_Tybbyldy.DyylGrid.FontName
.FontSize = DY_Tybbyldy.DyylGrid.FontSize
.CalcText = "测试"
Ztkd1 = .TextWid
Ztgd1 = .TextHei
.FontName = Sjfontname
.FontSize = Sjfontsize
.CalcText = "测试"
Ztkd2 = .TextWid
Ztgd2 = .TextHei
Kdfdbl = Ztkd2 / Ztkd1 / 1.001
Gdfdbl = Ztgd2 / Ztgd1
Bbgdhgd = DY_Tybbyldy.DyylGrid.RowHeight(0) * Gdfdbl
If DY_Tybbyldy.DyylGrid.Rows > DY_Tybbyldy.DyylGrid.FixedRows Then
Bbsjhgd = DY_Tybbyldy.DyylGrid.RowHeight(DY_Tybbyldy.DyylGrid.FixedRows) * Gdfdbl
Else
Bbsjhgd = DY_Tybbyldy.DyylGrid.RowHeight(DY_Tybbyldy.DyylGrid.Rows - 1) * Gdfdbl
End If
'计算高度(含主标题+下划线+小标题,表头+n行数据行,表尾总高度(保持报表完整性)
'计算主标题+下划线+小标题高度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -