| C++ Builder Snippets |
| Barcodes generieren, anzeigen, drucken: |
|
![]() |
|
Folgende Funktion nutzt die Kodieralgorithmen der Gnu-Barcode-Library um Strichcodes zu erzeugen und auf beliebigen TCanvas auszugeben: //--------------------------------------------------------------------------- // Funktion CreateBarcode() generiert den Übergabeparametern entsprechenden // Barcode und zeichnet diesen ggf. auf der übergebenen TCanvas-Instanz //--------------------------------------------------------------------------- // Übergabeparameter: // AnsiString slStr - zu kodierender String // // int ilEncoding - Barcode-Typ (siehe Datei gnu-barcode\barcode.h), // kann folgende Werte annehmen: // // BARCODE_ANY (Automatische Auswahl) // BARCODE_EAN (EAN) // BARCODE_UPC (UPC = 12 Ziffer EAN) // BARCODE_ISBN (ISBN-Code = EAN13) // BARCODE_39 (Code 39) // BARCODE_128 (Code 128 A,B,C -> automatische Aswahl) // BARCODE_128C (Code 128, kompakte Form für die Ziffern) // BARCODE_128B (Code 128, alle druckbare ASCII-Zeichen) // BARCODE_I25 (Interleaved 2 of 5, nur Ziffern) // BARCODE_93 (Code 93) // // TCanvas* pCanvas - Zeiger auf die TCanvas-Instanz, auf der der gezeichnet // Strichcode werden soll (z.B. Form1->Canvas, // Printer()->Canvas etc.) // int ilTop - Koordinaten der linken oberen Ecke des // int ilLeft Barcode-Rechtecks in Pixel ! // // int ilHeight - die Höhe des Barcode-Rechecks in Pixel, wird hier 0 // übergeben, wird kein Strichcode gezeichnet, die // Breite wird korrekt zurückgegeben // // int ilSingleBarWidth - die Breite eines einfachen Strichs // // AnsiString &slInfo - in diesen String wird die verwendete Kodierung und // der kodierte Text geschrieben //--------------------------------------------------------------------------- // Rückgabewert: die Breite des erzeugten Strichcodes in Pixel als Integer //--------------------------------------------------------------------------- // Hinweis: soll NUR die Breite des Strichcodes ermittelt werden, muss der // CreateBarcode() im Parameter ilHeight 0 übergeben werden // //--------------------------------------------------------------------------- int CreateBarcode(AnsiString slStr, int ilEncoding, TCanvas* pCanvas, int ilTop, int ilLeft, int ilHeight, int ilSingleBarWidth, AnsiString &slInfo) { Barcode_Item* pBarcode; // Zeiger auf die Barcode_Item-Instanz int ilBarXPos = -1; // X-Position des Strichs in Pixel int ilCurrentWidth = 0; // für die Breite des akt. Striches/Leerraums // Barcode-Instanz initialisieren: pBarcode=Barcode_Create(slStr.c_str()); // Barcode gem. Vorgaben erzeugen: if(pBarcode && Barcode_Encode(pBarcode, ilEncoding) >= 0) { // String Barcode->partial parsen und: AnsiString slCode = pBarcode->partial; for (int ilChar=2; ilChar <= slCode.Length(); ilChar++) { // Sonderfälle: '+' und '-' if(slCode[ilChar] != '+' && slCode[ilChar] != '-') { // ilCurrentWidth ist die Breite des Striches oder Leerraums if(isdigit(slCode[ilChar])) ilCurrentWidth = (slCode[ilChar]-'0')*ilSingleBarWidth; else ilCurrentWidth = (slCode[ilChar]-'a'+1)*ilSingleBarWidth; // Falls ein Strich gezeichnet werden soll: if (ilChar%2 == 0 && ilHeight) { pCanvas->Rectangle(ilBarXPos+ilLeft, ilTop, ilBarXPos+ilCurrentWidth+ilLeft, ilTop+ilHeight); } // X-Position inkrementieren: ilBarXPos += ilCurrentWidth; } else ilChar++; } // Folgende Anweisungen füllen den Info-String mit Kodieruings- // und Text-Informationen: AnsiString slTextInfo = AnsiString(pBarcode->textinfo); slInfo = AnsiString(pBarcode->encoding).UpperCase() + ", Text: "; bool blIgnore = true; // Den Text aus dem Infostring ausparsen: for(int ilChar = 1; ilChar <= slTextInfo.Length(); ilChar++) { if(slTextInfo[ilChar] == ':') { if(!blIgnore) slInfo += slTextInfo[ilChar+1]; blIgnore = !blIgnore; } } } Barcode_Delete(pBarcode); // Speicher aufräumen return ilBarXPos; } Anwendungsbeispiel: //--------------------------------------------------------------------------- // Barcode in die Zwischenablage kopieren //--------------------------------------------------------------------------- void __fastcall TfrmMain::btnClipboardClick(TObject *Sender) { // TBitmap-Instanz zum Zeichnen des Bacodes erzeugen: Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); // Grösse der Bitmap festlegen pBitmap -> Height = 100; // Barcode-Breite in Pixel bestimmen und der Bitmap zuweisen: pBitmap->Width = CreateBarcode("www.bytesandmore.de",BARCODE_128B, NULL,0,0,0,2,EmptyStr); // Canvas-"Pinselfarbe" festlegen: pBitmap->Canvas->Brush->Color = clBlack; // String für die Barcode-Information: AnsiString slInfo = EmptyStr; // Barcode generieren: if(CreateBarcode("www.bytesandmore.de", BARCODE_128B, pBitmap->Canvas, 0, 0, pBitmap->Height,2, slInfo) > 0) { // Die erzeugte Bitmap in die Zwischenablage kopieren: Clipboard()->Assign(pBitmap); } // Bitmap freigeben: if(pBitmap) { delete pBitmap; pBitmap = 0; } } |
|
Download BCB5 Projekt-Quellcode |
|
Download Demo-Exe |
| © '99-2002 by S. Kreutzmann |