当前位置:编程学习 > VB >>

如何调用大哥的条形码Private Sub PrintBarCode(...)

Private Sub PrintBarCode( _
        ByVal strBarCode As String, _
        Optional ByVal intXPos As Integer = 0, _
        Optional ByVal intYPos As Integer = 0, _
        Optional ByVal intPrintHeight As Integer = 10, _
        Optional ByVal bolPrintText As Boolean = True)
        '   参数说明:
'   strBarCode                 -   要打印的条形码字符串
'   intXPos,   intYPos     -   打印条形码的左上角坐标(缺省为(0,0),坐标刻度为:毫米)
'   intHeight                   -   打印高度(缺省为一厘米,坐标刻度为:毫米)
'   bolPrintText             -   是否打印人工识别字符(缺省为true)

'   "0 "- "9 ", "A-Z ", "- ", "% ", "$ "和 "* "   的条码编码格式,总共   40   个字符
       Static strBarTable(39)     As String
        strBarTable(0) = "001100100 "               '   0
        strBarTable(1) = "100010100 "               '   1
        strBarTable(2) = "010010100 "               '   2
        strBarTable(3) = "110000100 "               '   3
        strBarTable(4) = "001010100 "               '   4
        strBarTable(5) = "101000100 "               '   5
        strBarTable(6) = "011000100 "               '   6
        strBarTable(7) = "000110100 "               '   7
        strBarTable(8) = "100100100 "               '   8
        strBarTable(9) = "010100100 "               '   9
        strBarTable(10) = "100010010 "             '   A
        strBarTable(11) = "010010010 "             '   B
        strBarTable(12) = "110000010 "             '   C
        strBarTable(13) = "001010010 "             '   D
        strBarTable(14) = "101000010 "             '   E
        strBarTable(15) = "011000010 "             '   F
        strBarTable(16) = "000110010 "             '   G
        strBarTable(17) = "100100010 "             '   H
        strBarTable(18) = "010100010 "             '   I
        strBarTable(19) = "001100010 "             '   J
        strBarTable(20) = "100010001 "             '   K
        strBarTable(21) = "010010001 "             '   L
        strBarTable(22) = "110000001 "             '   M
        strBarTable(23) = "001010001 "             '   N
        strBarTable(24) = "101000001 "             '   O
        strBarTable(25) = "011000001 "             '   P
        strBarTable(26) = "000110001 "             '   Q
        strBarTable(27) = "100100001 "             '   R
        strBarTable(28) = "010100001 "             '   S
        strBarTable(29) = "001100001 "             '   T
        strBarTable(30) = "100011000 "             '   U
        strBarTable(31) = "010011000 "             '   V
        strBarTable(32) = "110001000 "             '   W
        strBarTable(33) = "001011000 "             '   X
        strBarTable(34) = "101001000 "             '   Y
        strBarTable(35) = "011001000 "             '   Z
        strBarTable(36) = "000111000 "             '   -
        strBarTable(37) = "100101000 "             '   %
        strBarTable(38) = "010101000 "             '   $
        strBarTable(39) = "001101000 "             '   *

        If strBarCode = " " Then Exit Sub                   '   不打印空串

             '   保存打印机   ScaleMode
        Dim intOldScaleMode As ScaleModeConstants
            intOldScaleMode = Printer.ScaleMode
        '   保存打印机   DrawWidth
        Dim intOldDrawWidth As Integer
            intOldDrawWidth = Printer.DrawWidth
        '   保存打印机   Font
        Dim fntOldFont     As StdFont
        Set fntOldFont = Printer.Font
        
        Printer.ScaleMode = vbTwips '   设置打印用的坐标刻度为缇(twip=1)
        Printer.DrawWidth = 1 '   线宽为   1
        Printer.FontName = "宋体 "
        Printer.FontSize = 10 '   打印在条码下方字符的字体和大小
        Dim strBC     As String '   要打印的条码字符串
        strBC = UCase(strBarCode)
        Dim x     As Integer '   将以毫米表示的   X   坐标转换为以缇表示
        x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips)
        '   将以毫米表示的   Y   坐标转换为以缇表示
        Dim y     As Integer
        y = Printer.ScaleY(intYPos, vbMillimeters, vbTwips) '   将以毫米表示的高度转换为以缇表示
        Dim intHeight     As Integer
        intHeight = Printer.ScaleY(intPrintHeight, vbMillimeters, vbTwips)
        If bolPrintText = True Then '   是否在条形码下方打印人工识别字符
                intHeight = intHeight - Printer.TextHeight(strBC) '   条码打印高度要减去下面的字符显示高度
        End If
        Const intWidthCU     As Integer = 30 '   粗线和宽间隙宽度
        Const intWidthXI     As Integer = 10 '   细线和窄间隙宽度
        Dim intIndex     As Integer       '   当前处理的字符串索引
    Dim i As Integer, j  As Integer, k As Integer           '   循环控制变量
        If Left(strBC, 1) <> "* " Then         '   添加起始字符
                strBC = "* " & strBC
        End If
        If Right(strBC, 1) <> "* " Then        '   添加结束字符
                strBC = strBC & "* "
        End If
        
        For i = 1 To Len(strBC) '   循环处理每个要显示的条码字符
                                '   确定当前字符在   strBarTable   中的索引
                Select Case Mid(strBC, i, 1)
                Case "* "
                        intIndex = 39
                Case "$ "
                        intIndex = 38
                Case "% "
                        intIndex = 37
                Case "- "
                        intIndex = 36
                Case "0 " To "9 "
                        intIndex = CInt(Mid(strBC, i, 1))
                Case "A " To "Z "
                        intIndex = Asc(Mid(strBC, i, 1)) - Asc("A ") + 10
                Case Else
                        MsgBox "要打印的条形码字符串中包含无效字符! 当前版本只支持字符'0 '- '9 ', 'A '- 'Z ', '- ', '% ', '$ '和 '* ' "
                End Select
                
                '   是否在条形码下方打印人工识别字符
                If bolPrintText = True Then
                        Printer.CurrentX = x
                        Printer.CurrentY = y + intHeight
                        Printer.Print Mid(strBC, i, 1)
                End If

                For j = 1 To 5
                        '   画细线
                        If Mid(strBarTable(intIndex), j, 1) = "0 " Then
                                For k = 0 To intWidthXI - 1
                                        Printer.Line (x + k, y)-Step(0, intHeight)
                                Next k
                                x = x + intWidthXI
                        '   画宽线
                        Else
                                For k = 0 To intWidthCU - 1
                                        Printer.Line (x + k, y)-Step(0, intHeight)
                                Next k
                                x = x + intWidthCU
                        End If

                        '   每个字符条码之间为窄间隙
                        If j = 5 Then
                                x = x + intWidthXI * 3
                                Exit For
                        End If
                        
                        '   窄间隙
                        If Mid(strBarTable(intIndex), j + 5, 1) = "0 " Then
                                x = x + intWidthXI * 3
                        '   宽间隙
                        Else
                                x = x + intWidthCU * 2
                        End If
                Next j
        Next i

        '   恢复打印机   ScaleMode
        Printer.ScaleMode = intOldScaleMode
        '   恢复打印机   DrawWidth
        Printer.DrawWidth = intOldDrawWidth
        '   恢复打印机   Font
        Set Printer.Font = fntOldFont

        End Sub
这 个程序如何把它写在自己的程序里去?求各们高手相助 --------------------编程问答-------------------- 拷贝过去,然后调用就可以 --------------------编程问答-------------------- call PrintBarCode(......)
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,