Newsgroup: it.comp.lang.visual-basic
Titolo: codici a barre

Sono alle prese scon un lettore di codici a barre ma non so da dove
cominciare, devo implementare un DB!!esistono delle OCX da qualche parte che
mi diano l'oggetto già creato ?? visto che da porta seriale usando l'mscomm
funziona ma non so come  creare i codici !!! grazie
Roberto

 etichetta ??
Ulisse li 19/05/01 ha risposto:
Io sto usando questo Modulo.... provalo.. a me funge... uso VB6...
Sub DrawBarcode(ByVal bc_string As String, obj As Control)
Dim xpos!, y1!, y2!, dw%, th!, tw, new_string$
'define barcode patterns
Dim bc(90) As String
bc(1) = "1 1221"            'pre-amble
bc(2) = "1 1221"            'post-amble
bc(48) = "11 221"           'digits
bc(49) = "21 112"
bc(50) = "12 112"
bc(51) = "22 111"
bc(52) = "11 212"
bc(53) = "21 211"
bc(54) = "12 211"
bc(55) = "11 122"
bc(56) = "21 121"
bc(57) = "12 121"
                            'capital letters
bc(65) = "211 12"           'A
bc(66) = "121 12"           'B
bc(67) = "221 11"           'C
bc(68) = "112 12"           'D
bc(69) = "212 11"           'E
bc(70) = "122 11"           'F
bc(71) = "111 22"           'G
bc(72) = "211 21"           'H
bc(73) = "121 21"           'I
bc(74) = "112 21"           'J
bc(75) = "2111 2"           'K
bc(76) = "1211 2"           'L
bc(77) = "2211 1"           'M
bc(78) = "1121 2"           'N
bc(79) = "2121 1"           'O
bc(80) = "1221 1"           'P
bc(81) = "1112 2"           'Q
bc(82) = "2112 1"           'R
bc(83) = "1212 1"           'S
bc(84) = "1122 1"           'T
bc(85) = "2 1112"           'U
bc(86) = "1 2112"           'V
bc(87) = "2 2111"           'W
bc(88) = "1 1212"           'X
bc(89) = "2 1211"           'Y
bc(90) = "1 2211"           'Z
                            'Misc
bc(32) = "1 2121"           'space
bc(35) = ""                 '# cannot do!
bc(36) = "1 1 1 11"         '$
bc(37) = "11 1 1 1"         '%
bc(43) = "1 11 1 1"         '+
bc(45) = "1 1122"           '-
bc(47) = "1 1 11 1"         '/
bc(46) = "2 1121"           '.
bc(64) = ""                 '@ cannot do!
bc(65) = "1 1221"           '*
bc_string = UCase(bc_string)
'dimensions
obj.ScaleMode = 3                               'pixels
obj.Cls
obj.Picture = Nothing
dw = CInt(obj.ScaleHeight / 40)                 'space between bars
If dw < 1 Then dw = 1
'Debug.Print dw
th = obj.TextHeight(bc_string)                  'text height
tw = obj.TextWidth(bc_string)                   'text width
new_string = Chr$(1) & bc_string & Chr$(2)      'add pre-amble, post-amble
y1 = obj.ScaleTop
y2 = obj.ScaleTop + obj.ScaleHeight - 1.5 * th
obj.Width = 1.1 * Len(new_string) * (15 * dw) * obj.Width / obj.ScaleWidth
'draw each character in barcode string
xpos = obj.ScaleLeft
For n = 1 To Len(new_string)
    c = Asc(Mid$(new_string, n, 1))
    If c > 90 Then c = 0
    bc_pattern$ = bc(c)
    'draw each bar
    For I = 1 To Len(bc_pattern$)
        Select Case Mid$(bc_pattern$, I, 1)
            Case " "
                'space
                obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF
                xpos = xpos + dw
            Case "1"
                'space
                obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF
                xpos = xpos + dw
                'line
                obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &H0&, BF
                xpos = xpos + dw
            Case "2"
                'space
                obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF
                xpos = xpos + dw
                'wide line
                obj.Line (xpos, y1)-(xpos + 2 * dw, y2), &H0&, BF
                xpos = xpos + 2 * dw
        End Select
    Next
Next
'1 more space
obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF
xpos = xpos + dw
'final size and text
obj.Width = (xpos + dw) * obj.Width / obj.ScaleWidth
obj.CurrentX = (obj.ScaleWidth - tw) / 2
obj.CurrentY = y2 + 0.25 * th
obj.Print bc_string
'copy to clipboard
obj.Picture = obj.Image
Clipboard.Clear
Clipboard.SetData obj.Image, 2
End Sub