Option Explicit ' Written by Rodney Marr (RodMarr@mailcity.com) October 7, 2000 ' ' Barcode 128-B Generator ' ' Permission granted for public use and royalty-free distribution. ' No mention of source or credits is required. ' ' I got a lot of help from the following people's work ' Russ Adams' BarCode 1 Web Page http://www.adams1.com/pub/russadam/info.html ' A Free 128-B code generator in Visual Basic by Stefan Karlsson (mrswede@libertysurf.se) ' And the Creator of the code 39 Module ' 'For Notes on how to use this code look at the code for the barcode39 Generator Public Function SetBarData(Ctrl As control, rpt As Report) On Error GoTo ErrorTrap_SetBarData 'Code 128B has 5 main parts to it. The first part is a start character(211214), followed by DataCharcters. The Data 'Characters are followed by a check(or Checksum) Character, and that is followed by a stop Character(2331112) 'The last part of Code 128B is the two quiet sections at the front and back of the barcode. These are 10 dimensions 'Long(I am thinking that is 11 modules long). Each character is 11 modules long, except the stop character which is '13 modules long Dim CharNumber As Variant, CharData As Variant, CharBarData As Variant, Nratio As Variant, Nbar As Variant Dim barcodestr As String, Barcode As String, Barchar As String, Barcolor As Long, Parts As Integer, j As Integer Dim tsum As Integer, lop As Integer, s As Integer, checksum As Integer, P As Integer, barwidth As Integer Dim boxh As Single, boxw As Single, boxx As Single, boxy As Single, Pix As Single, Nextbar As Single Const White = 16777215: Const Black = 0 'This is the Raw data that I threw into an arrays CharNumber = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16,", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29,", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106") CharData = Array("SP", "!", Chr(34), "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "I", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "DEL", "FNC 3", "FNC 2", "SHIFT", "CODE C", "FNC 4", "CODE A", "FNC 1", "Start A", "Start B", "Start C", "Stop") CharBarData = Array("212222", "222122", "222221", "121223", "121322", "131222", "122213", "122312", "132212", "221213", "221312", "231212", "112232", "122132", "122231", "113222", "123122", "123221", "223211", "221132", "221231", "213212", "223112", "312131", "311222", "321122", "321221", "312212", "322112", "322211", "212123", "212321", "232121", "111323", "131123", "131321", "112313", "132113", "132311", "211313", "231113", "231311", "112133", "112331", "132131", "113123", "113321", "133121", "313121", "211331", "231131", "213113", "213311", "213131", "311123", "311321", "331121", "312113", "312311", "332111", "314111", "221411", "431111", "111224", "111422", "121124", "121421", "141122", "141221", "112214", "112412", "122114", "122411", "142112", "142211", "241211", "221114", "413111", "241112", "134111", "111242", "121142", "121241", "114212", "124112", "124211", "411212", "421112", "421211", "212141", _ "214121", "412121", "111143", "111341", "131141", "114113", "114311", "411113", "411311", "113141", "114131", "311141", "411131", "211412", "211214", "211232", "2331112") barcodestr = "211214" 'Add the Startcode for Start B (characterset B) to the barcode string tsum = 104 'And this is the value for that startcode which will be added with the other character values to find the checksum character boxx = Ctrl.Left boxy = Ctrl.TOP boxw = Ctrl.Width boxh = Ctrl.Height 'Get control size and location properties. Barcode = Ctrl 'Set handle on control. Nratio = Array("0", "15", "30", "45", "60") 'Set up the array for the different bar width ratios Parts = ((11 * (Len(Barcode))) + 35) * Nratio(1) 'This is the formula for the width of the barcode Pix = (boxw / Parts) 'Here I find out exactly how many Pixels a bar will be 'Set up the array to handle the pixels for each type of bar Nbar = Array((Nratio(0) * Pix), (Nratio(1) * Pix), (Nratio(2) * Pix), (Nratio(3) * Pix), (Nratio(4) * Pix)) 'Loop through all bardata to count the sum for all characters and add barcode charcter strings the to the barcode string For lop = 1 To Len(Barcode) Barchar = Mid(Barcode, lop, 1) If Barchar = " " Then Barchar = "SP" For s = 0 To UBound(CharData) If Barchar = CharData(s) Then barcodestr = barcodestr & CharBarData(s) 'This is where I added the character strings to each other to make one long string of 1's, 2's, 3's, & 4's tsum = tsum + (CLng(CharNumber(s)) * lop) 'Here every barcode character's number value is multiplied by its position in the line and added to tsum 'The actual formula for find the the Checksum is "(104 + (1 * CharcterNumber) + (2 * CharcterNumber) + ...)/103" 'You would Use the Remainder as 'The Checksum Character. In the case of "BarCode 1" the formula would look 'like "(104+(1*34)+(2*65)+(3*82)+(4*35)+(5*79)+(6*68)+(7*69)+(8*0)+(9*17))/103=20 with Remainder of 33" 'Therefore the checksum would equal 33 Exit For End If Next s Next lop checksum = tsum - (Int(tsum / 103) * 103) 'Here I use the the totat sum (tsum) to find the checksum barcodestr = barcodestr & CharBarData(checksum) & "2331112" 'Here I add the checksum then the stop character into the barcode string 'lets do some initialization Barcolor = Black Nextbar = boxx + 11 'I added the 20 for the whitespace (or quiet space) at the beginning of the barcode 'Draw the Barcode For j = 1 To Len(barcodestr) Barchar = Mid(barcodestr, j, 1) 'Reuse variable barchar to store the character to be drawn barwidth = CInt(Barchar) 'Change the barcode charcter into an integer so I can use in the array part of the next line rpt.Line (Nextbar, boxy)-Step(Nbar(barwidth), boxh), Barcolor, BF 'Draw the line Nextbar = Nextbar + Nbar(barwidth) 'Calculate the next starting point If Barcolor = White Then Barcolor = Black Else Barcolor = White 'Swap line colors Next j Exit_SetBarData: Exit Function ErrorTrap_SetBarData: MsgBox Error$ Resume Exit_SetBarData End Function