Hallo Leute!
Ich habe mein Barcode Modul um den Code128 erweitert.
Es werden alle drei Codepages (A, B und C) unterstützt.
Leider ist der Code128 für den Benutzer nicht so einfach zu handhaben wie beispielsweise der EAN8 oder EAN13.
Das heißt: Man kann nicht einfach irgendwas eintippen und hoffen das klappt schon. Man muss die Steuercodes kennen.
Hier ein kurzes Beispiel welches "Hallo PB-GEMEINDE 2018" ausgibt:
Code: Alles auswählen
IncludeFile "C:\Users\Micha\Desktop\Barcode_Module\Source\Barcode_Module.pbi"
EnableExplicit
UseModule Common
UseModule Barcode
Define Checksum = Generate_Code128_Checksum("<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018")
If Checksum > 99
Debug "Fehler: " + Checksum
End
EndIf
Define Code128.s, Code128_Sequence.s, Checksum.i, Result.i
Code128_Sequence.s = Generate_Code128_Sequence("<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018;<P>" + Str(Checksum) + ";<STOP>")
If Code128_Sequence.s = "26" Or Code128_Sequence.s = "27" Or Code128_Sequence.s = "28" Or Code128_Sequence.s = "29" Or Code128_Sequence.s = "30"
Debug "Fehler: " + Code128_Sequence.s
End
EndIf
NewList Barcode.Barcode_Parameter() ;Alle Barcodes die gedruckt werden sollen
NewList Text.Text_Line() ;Alle Textzeilen gedruckt werden sollen
Define Printer.Print_Parameter ;Druckparameter
;Papiergrösse/Druckparameter. Alle Größenangaben in Millimeter!
Printer\Page_width = 210 ;A4
Printer\Page_height = 297 ;A4
Printer\Left_edge = 20 ;20mm Rand
Printer\Right_edge = 20 ;20mm Rand
Printer\Top_edge = 20 ;20mm Rand
Printer\Upper_edge = 20 ;20mm Rand
Printer\Pages = 1 ;Anzahl zu druckender Seiten
Printer\Print_Requester = #True ;#False für Standarddrucker, #True für Drucker Auswahl
;Einen Code128 hinzufügen. Alle Größenangaben in Millimeter!
AddElement(Barcode())
Barcode()\Type = "CODE128" ;Aktuell wird "EAN8", "EAN13" und "Code128" unterstützt
Barcode()\Barcode = "Hallo PB-GEMEINDE 2018" ;Die Barcodeziffern inkl. Prüfziffer
Barcode()\Font = "Arial" ;Zeichensatz für Ziffern. Leer lassen wenn keine Ziffern erzeugt werden sollen
Barcode()\Sequence = Code128_Sequence.s ;Wurde von <Generate_Code128_Sequence()> erzeugt
Barcode()\Width = 70 ;Die Barcode Breite
Barcode()\Height = 20 ;Die Barcode Höhe
Barcode()\PosX = 90 ;Position
Barcode()\PosY = 50 ;Position
Barcode()\Color0_RGB = "255,255,255" ;Linienfarbe1 als RGB getrennt durch Komma
Barcode()\Color1_RGB = "0,0,0" ;Linienfarbe1 als RGB getrennt durch Komma
Barcode()\ColorDigits_RGB = "0,0,0" ;Farbe der Ziffern als RGB getrennt durch Komma
Result.i = Print_Barcode(Barcode(), Printer, Text())
If Result.i <> 1
Debug "Fehler :" + Result.i
EndIf
Dieses Beispiel benutzt alle drei Codepages.
"<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018;<P>" + Str(Checksum) + ";<STOP>"
Dieser Code startet mit Codepage B. Für "Hallo" wird also Codepage B benutzt.
Dann wird auf Code A umgeschaltet und für "PB-GEMEINDE" benutzt.
Als nächstes wird für "2018" auf Code C umgeschaltet.
Nun folgt ein <P> für Prüfziffer gefolgt von der vorher errechneten Prüfziffer.
Als letztes folgt der Stop-Code.
Wie Ihr vielleicht schon gesehen habt, sind die einzelnen Codebereiche durch ein Semikolon zu trennen.
Hier
die Schreibweise der Code- Funktionen:
Codepage A:
Code: Alles auswählen
"<NUL>","<SOH>","<STX>","<ETX>","<EOT>","<ENQ>","<ACK>","<BEL>","<BS>","<HT>","<LF>","<VT>","<FF>","<CR>","<SO>","<SI>","<DLE>",
"<DC1>","<DC2>","<DC3>","<DC4>","<NAK>","<SYN>","<ETB>","<CAN>","<EM>","<SUB>","<ESC>","<FS>","<GS>","<RS>","<US>","<FNC 3>","<FNC 2>","<SHIFT>","<CODE C>",
"<CODE B>","<FNC 4>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Codepage B:
Code: Alles auswählen
"<DEL>","<FNC 3>","<FNC 2>","<SHIFT>","<CODE C>","<FNC 4>","<CODE A>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Codepage C:
Code: Alles auswählen
<CODE B>","<CODE A>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Auf dieser Seite
http://www.adams1.com/128table.html ist sehr schön zu sehen, welche Codepage welche Zeichen darstellen kann.
Ich weis, ist nicht so einfach, beantworte aber gerne Fragen.
Noch eine Info zum Drucken und Scannen:
Der Code128 hat eine recht hohe Informationsdichte.
Damit möchte ich sagen, je kleiner gedruckt werden soll, desto besser müssen Drucker und Barcodeleser sein.
Grüße