Newsgroup: it.comp.lang.visual-basic
Titolo: Codici a barre: come si fa?

Vorrei implementare nel mio programma una funzione che riesca a leggere (e a
stampare) i codici a barre. Potreste darmi qualche informazione preliminare,
ad esempio se servono OCX o programmi particolari o quanto costa un lettore
di codici a barre?
Grazie!
Andrea

 wrote in message
PXG67.636$JA2....@news1.tin.it...

praticamente non ho mai lavorato con i codici a barre ma dovrebbero essere
dei font particolari che puoi trovare su internet
sono una serie di numeri visualizzati con una font particolare
ciao

 wrote in message
PXG67.636$JA2....@news1.tin.it...

Pochi giorni fa, e' stato postato un codice per creare codici a barre
ma non so di che tipo: EAN...).  Per leggerli, puoi utilizzare una pistola
o una penna ottica ad emulazione di tastiera: in questo modo il campo
letto viene passato come se fosse digitato da tastiera. Se hai il focus
su un TextBox, questo di riempie da solo con il codice letto.
------------------------------------cut-------------------------------------
----
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
------------------------------------cut-------------------------------------
----
CIAO!

 wrote in message
PXG67.636$JA2....@news1.tin.it...

Per stampare  i codici a barre è sufficiente stampare la stringa che ti
interessa con un font particolare (moltissime stampanti anche laser oggi
supportano i font per i barcode).
Credo sia importante inoltre decidere quale tipo di codice a barre ti
conviene usare, i più diffusi sono:
- EAN 128 è l'unico che supporta i caratteri alfanumerici ed è Case
Sensitive, permette di stampare fino a, cioè distingue maiuscole e minuscole
però generalmente è molto lungo;
- Code 39 supporta i caratteri alfanumerici ma non è case sensitive,
generalmente è più corto dell'EAN128 (cioè scrive la stessa stringa in un
barcode più stretto).
i prossimi supportano solo caratteri numerici:
- EAN8 (8 numeri fissi)
-EAN 13 (13 numeri fissi ) con possibilità che l'ultimo sia un check-digit.
-Industrial 2 of 5, solo numeri ma limitato a 100 caratteri
Per quanto riguarda i lettori ce ne sono di tutti i prezzi e tutti
supportano nativamente qs barcodes, la scelta dipende anche dalla qualità
delle etichette (sfondo bianco o colorato, barcode nitido o meno), dalla
distanza di lettura, dal fatto che l'etichetta sia o meno coperta da
cellophane o termoretraibile. I costi oscillano dalle 300mila al milione e
300mila per lettore (iva esclusa).
HTH, Ciao
Bolo