' Gambas module file Public Sub PrintBarcode(bcode As String, posX As Integer, posY As Integer, bcHeight As Integer, barThickness As Integer, SorP As Boolean) Dim structure As New String[10] 'DIM enc AS String[10, 3]. I did it the following way 'cos I get not get the prg to read a multi-dimension array! Dim enc1 As New String[10] Dim enc2 As New String[10] Dim enc3 As New String[10] Dim fontSizeScreen As New Integer[10] Dim fontSizePrinter As New Integer[10] Dim first6 As String ' encoding for first 6: l-code(1), g-code(2) Dim j As Integer Dim l As Integer Dim k As Integer Dim frst As Integer 'the first digit Dim num As Integer 'each digit in turn Dim bars As String ' the bars for the digit 'Dim thkns As Integer 'thickness of each bar Dim LinePos As Integer 'used to horizontaly locate the next bar ' structure = ["111111", "112122", "112212", "112221", "121122", "122112", "122211", "121212", "121221", "122121"] enc1 = ["0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011"] enc2 = ["0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111"] enc3 = ["1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100"] fontSizeScreen = [6, 9, 12, 16, 20, 24, 26, 28, 28, 30] fontSizePrinter = [2, 2, 2, 4, 4, 6, 6, 8, 8, 10] frst = Val(Left(bcode, 1)) first6 = structure[frst] 'draw 1st 2 deep bars----------------------------------------------- For l = 1 To barThickness Draw.Line(l + posX, 1 + posY, l + posX, bcHeight * 1.2 + posY) Next LinePos = LinePos + barThickness * 2 'allows for following gap For l = 1 To barThickness Draw.Line(LinePos + l + posX, 1 + posY, LinePos + l + posX, bcHeight * 1.2 + posY) Next LinePos = LinePos + barThickness '--------------------------------------------------------------- For j = 2 To 13 'loop through each of the 12 digits num = Val(Mid$(bcode, j, 1)) 'find the individual number IN the first 6 If j < 8 Then 'different for first 6 If Val(Mid(first6, j - 1, 1)) = 1 Then 'find the bars making up that number (L,G or R) bars = enc1[num] Else bars = enc2[num] Endif Else bars = enc3[num] Endif 'put the 2 middle deep bars---------------------------------------- If j = 8 Then LinePos = LinePos + barThickness For l = 1 To barThickness Draw.Line(linepos + l + posX, 1 + posY, linepos + l + posX, bcHeight * 1.2 + posY) Next LinePos = LinePos + barThickness * 2 'allows for following gap For l = 1 To barThickness Draw.Line(LinePos + l + posX, 1 + posY, LinePos + l + posX, bcHeight * 1.2 + posY) Next LinePos = LinePos + barThickness * 2 'allows for following gap Endif '--------------------------------------------------------------- For k = 1 To 7 'draw bars for single digit If Mid(bars, k, 1) = "1" Then For l = 1 To barThickness Draw.Line(linepos + l + posX, 1 + posY, LinePos + l + posX, bcHeight + posY) Next Endif linepos = LinePos + barThickness Next Next 'draw last 2 deep bars------------------------------------------------ For l = 1 To barThickness Draw.Line(linepos + l + posX, 1 + posY, linepos + l + posX, bcHeight * 1.2 + posY) Next LinePos = LinePos + barThickness * 2 'allows for following gap For l = 1 To barThickness Draw.Line(LinePos + l + posX, 1 + posY, LinePos + l + posX, bcHeight * 1.2 + posY) Next '--------------------------------------------------------------- 'write the barcode text If SorP Then Draw.Font.Size = fontSizeScreen[barThickness - 1] Else Draw.Font.Size = fontSizePrinter[barThickness - 1] Endif Draw.Text(Left(bcode, 1), posX - barThickness * 6, posY + bcHeight * 1.02) Draw.Text(Mid(bcode, 2, 6), posX + barThickness * 9, posY + bcHeight * 1.02) Draw.Text(Right(bcode, 6), posX + barThickness * 58, posY + bcHeight * 1.02) End