Nyt on viivakoodin tulostaminen omituinen.
Tulostan viivakoodin sovelluksestani ja aina ensimmäinen kerta viivakoodi on ok, mutta seuraava kerta koko koodin tulostusala on mustana.
Poistun VB sovelluksesta ja startaan sen uudelleen, sitten kun ajan ohjelman, niin eka kerta jälleen ok, mutta seuraava ei. Jos en siis poistu VB-sovelluksesta kokonaan, homma ei toimi.
ps. Kaikki muuttujat ovat samassa Sub Private proseduurissa
Koodi: (kopioitu ohjelmointiputkan esimerkeistä)
For n = 1 To Len(new_string) c = Asc(Mid$(new_string, n, 1)) If c > 90 Then c = 0 bc_pattern$ = bc(c) ' bc(c) = Code39 For i = 1 To Len(bc_pattern$) Select Case Mid$(bc_pattern$, i, 1) Case " " Printer.Line (XPOS, Y1)-(XPOS + 1 * dw, Y2), &HFFFFFF, BF XPOS = XPOS + dw Case "1" Printer.Line (XPOS, Y1)-(XPOS + 1 * dw, Y2), &HFFFFFF, BF XPOS = XPOS + dw Printer.Line (XPOS, Y1)-(XPOS + 1 * dw, Y2), &H0&, BF XPOS = XPOS + dw Case "2" Printer.Line (XPOS, Y1)-(XPOS + 1 * dw, Y2), &HFFFFFF, BF XPOS = XPOS + dw Printer.Line (XPOS, Y1)-(XPOS + 2 * dw, Y2), &H0&, BF XPOS = XPOS + 2 * dw End Select Next Next
Mod. korjasi kooditagit!
Mitä muuta teet kun tulostelet viivakoodeja? Muutatko esimerkiksi kirjoittimen scalemodea jossain vaiheessa tms?
Valitettavasti en löytänyt ohjelmointiputkan esimerkkiä, mistä koodi on kopioitu. Ehkä voisit laittaa linkin siihen.
Grez
Alunperin koodi teki vain näyttöön tuon viivakoodin ja siinä määriteltiin tosiaankin ScaleMode 3( muuttelin sen "Printer" objektiksi). Tässä proseduurissa olin unohtanut määritellä ScaleMode:n joten se kai on oletus "nolla"
no sitten kun on tullut eka printti joka on ok, ja tekee uuden printin niin vaikka laitan siihen ScaleMode 3 tai 6 tai 0 niin sama juttu.
en nyt olekkaan varma mistä tuo koodi on peräisin mutta tässä koko aliohjelma:
Sub DrawBarcode(ByVal bc_string As String, obj As Object) Dim xpos!, Y1!, Y2!, dw%, Th!, tw, new_string$ If bc_string = "" Then obj.Cls: Exit Sub '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! 'A Fix made by changing 65 to 42. bc(42) = "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 End Sub
Mod. korjasi kooditagit, opettele itsekin käyttämään!
Laittamsi koodi kirjoittimelle käytettynä (pienin muutoksin jotka on pakko tehdä jos obj on tulostin) tulostaa ihan saman kaksi kertaa peräkkäin kutsuttaessa, eli koko sivun kokoisen viivakoodin ja tekstin seuraavalle sivulle.
Jotta voisit saada järkevän vastauksen kysymykseesi niin kannattaisi laittaa se koodi, jolla ongelma esiintyy, eikä jotain muuta koodia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.