VB.NET-Tipp 0040: Barcode39 mit .NET
von Florian Sauer
Beschreibung
Der Barcode 39 ist ein Barcode welcher eine Reihe von 43 fest definierten Zeichen in 9 Balken pro Zeichen umwandelt. Dieses Beispiel, welches auch leicht an andere Barcodes anpassbar ist, zeichnet einen solchen Barcode in ein beliebiges Steuerelement.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2002/2003 ' Option Strict: Aus ' Option Explicit: An ' ' Referenzen: ' - System ' - System.Data ' - System.Drawing ' - System.Windows.Forms ' - System.XML ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ############################### Barcode39.vb ################################# ' ############################################################################## Public Class frmBarcode29 Inherits System.Windows.Forms.Form Private Function MD_Barcode39(ByVal Barcode As String, _ ByVal PaintObj As Object, _ ByVal mLeft As Single, _ ByVal mTop As Single, _ ByVal mWidth As Single, _ ByVal mHeight As Single) Const Nratio = 20, Wratio = 55, Qratio = 35 Dim Nbar As Single, Wbar As Single, Qbar As Single, NextBar As Single Dim CountX As Single, CountY As Single, CountR As Single Dim Parts As Single, Pix As Single, BarCodePlus As String Dim Stripes As String, BarType As String Dim Mx As Single, [My] As Single, Sx As Single, Sy As Single Dim g As System.Drawing.Graphics Dim pB As New System.Drawing.SolidBrush(System.Drawing.Color.Black) Dim pW As New System.Drawing.SolidBrush(System.Drawing.Color.White) Dim color As System.Drawing.SolidBrush Try ' Get control size and location properties. Sx = mLeft Sy = mTop Mx = mWidth [My] = mHeight g = PaintObj.CreateGraphics() ' Calculate actual and relative pixels values. Parts = (Barcode.Length + 2) * _ ((6 * Nratio) + (3 * Wratio) + (1 * Qratio)) Pix = (Mx / Parts) Nbar = (20 * Pix) : Wbar = (55 * Pix) : Qbar = (35 * Pix) ' Initialize bar index and color. NextBar = Sx color = pW ' Pad each end of string with start/stop characters. BarCodePlus = "*" & Barcode.ToUpper & "*" ' Walk through each character of the barcode contents. For CountX = 0 To BarCodePlus.Length - 1 ' Get Barcode 1/0 string for indexed character. Stripes = MD_BC39(BarCodePlus.Substring(CountX, 1)) For CountY = 0 To 8 ' For each 1/0, draw a wide/narrow bar. BarType = Stripes.Substring(CountY, 1) 'Toggle the color (black/white). If color Is pW Then color = pB Else color = pW End If Select Case BarType Case "1" ' Draw a wide bar. g.FillRectangle(color, NextBar, Sy, _ Wbar + NextBar, [My] + Sy) NextBar = NextBar + Wbar Case "0" ' Draw a narrow bar. g.FillRectangle(color, NextBar, Sy, _ Nbar + NextBar, [My] + Sy) NextBar = NextBar + Nbar End Select Next CountY ' Toggle the color (black/white). If color Is pW Then color = pB Else color = pW End If ' Draw intermediate "quiet" bar. g.FillRectangle(color, NextBar, Sy, Qbar + NextBar, [My] + Sy) NextBar = NextBar + Qbar Next CountX Catch ex As Exception MessageBox.Show(ex.StackTrace) End Try End Function Function MD_BC39(ByVal CharCode As String) As String Try Dim BC39(90) As String BC39(32) = "011000100" ' space BC39(36) = "010101000" ' $ BC39(37) = "000101010" ' % BC39(42) = "010010100" ' * Start/Stop BC39(43) = "010001010" ' + BC39(45) = "010000101" ' | BC39(46) = "110000100" ' . BC39(47) = "010100010" ' / BC39(48) = "000110100" ' 0 BC39(49) = "100100001" ' 1 BC39(50) = "001100001" ' 2 BC39(51) = "101100000" ' 3 BC39(52) = "000110001" ' 4 BC39(53) = "100110000" ' 5 BC39(54) = "001110000" ' 6 BC39(55) = "000100101" ' 7 BC39(56) = "100100100" ' 8 BC39(57) = "001100100" ' 9 BC39(65) = "100001001" ' A BC39(66) = "001001001" ' B BC39(67) = "101001000" ' C BC39(68) = "000011001" ' D BC39(69) = "100011000" ' E BC39(70) = "001011000" ' F BC39(71) = "000001101" ' G BC39(72) = "100001100" ' H BC39(73) = "001001100" ' I BC39(74) = "000011100" ' J BC39(75) = "100000011" ' K BC39(76) = "001000011" ' L BC39(77) = "101000010" ' M BC39(78) = "000010011" ' N BC39(79) = "100010010" ' O BC39(80) = "001010010" ' P BC39(81) = "000000111" ' Q BC39(82) = "100000110" ' R BC39(83) = "001000110" ' S BC39(84) = "000010110" ' T BC39(85) = "110000001" ' U BC39(86) = "011000001" ' V BC39(87) = "111000000" ' W BC39(88) = "010010001" ' X BC39(89) = "110010000" ' Y BC39(90) = "011010000" ' Z Return BC39(Asc(CharCode)) Catch ex As Exception Return "" End Try End Function Private Sub txtString_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles txtString.TextChanged pnlCode.Refresh() End Sub Private Sub pnlCode_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles pnlCode.Paint MD_Barcode39(txtString.Text, pnlCode, 0, 0, _ pnlCode.Size.Width, pnlCode.Size.Height) End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Martin am 27.01.2009 um 13:57
Hallo Leute,
vielen Dank erstmal für den super Ansatz, genau danach habe
ich gesucht!
Frage:
Hat jemand eine Idee, wie ich das generierte Bild (Barcode 39) jetzt wieder einlesen und auswerten kann?
Ich wäre für jeden Ansatz (Idee) sehr dankbar, beste Grüße
Martin
Kommentar von Yasser am 13.01.2008 um 00:12
sehr hilfreich, Danke.
Kommentar von am 10.12.2006 um 18:45
funktioniert super !
Kommentar von Gianluca am 30.07.2004 um 10:35
Hi,
I've used the same script two years ago, but it was VB 6.0... now I need to develop the same thing using asp net... and I've found problems to convert this code to generate a png, or a gif Image to print via browser. Could you help me?