Generator kodów kreskowych GS1-128 (EAN/UCC)
Podczas realizacji jednego z projektów dla branży logistycznej, potrzebna była funkcjonalność wydruku etykiety z kodami kreskowymi w formacie GS1-128. Napisałem odpowiednią bibliotekę, dzięki której można zakodować żądany ciąg w formacie kodu kreskowego GS1-128. Wynik zostanie on automatycznie zapisany w formacie graficznym lub bezpośrednio do strumienia pamięci.
Opis
Natywna biblioteka do generowania kodów kreskowych w standardzie Code-128 oraz GS1-128 z możliwością konfiguracji parametrów. Biblioteka współpracuje ze wszystkimi popularnymi środowiskami takimi jak: Delphi (7, XE+), C++/CLI, C#, QT. W pakiecie dołączane są aplikacje demonstracyjne z pełnym kodem źródłowym.
Możliwości biblioteki
- Generowanie kodów w standardzie Code-128 oraz GS1-128
- Zapis kodu kreskowego do pliku w formacie BMP lub JPG
- Zapis kodu kreskowego bezpośrednio do pamięci w przypadku Delphi
- Metoda kodowania:Â automatyczna lub manualna
- Manipulacja tekstem
- Manipulacja wymiarami kodu
Galeria
Strona Internetowa
Potrzebujesz Å‚adnej strony internetowej? Zobacz demo na: tej stronie
Witam !
Zwracam się z gorącą prośbą o pomoc.
PiszÄ™ program który ma pokazać na ekranie i wydrukować etykietÄ™ z numerem      w postaci kodu kreskowego w formacie code 128 . PiszÄ™ w Delphi 3 i do wydruku  używam QRepord . Dla Panel1   i dla QRLabel1 zadeklarowaÅ‚em fonty code 128      ( Panel1.Font.Name := ‘Code 128’;) . Obliczam znak kontrolny i dodajÄ™ znak startu (#204) i znak stopu (#206) zgodnie z opisem – i nic .Skaner nie odczytuje . Od paru dni moje zmagania koÅ„czÄ… się porażkÄ… . Jak byÅ› mógÅ‚ pomóc w napisaniu takiej funkcji lub podesÅ‚ać komponent rozwiÄ…zujÄ…cy problem byÅ‚bym bardzo wdziÄ™czny . Z góry bardzo dziÄ™kujÄ™
Â
procedure TForm1.Button1Click(Sender: TObject);
const
     MCode128     : string = ”;
 var
     Chaine128   : string;
     Code128     : string;
     Cle128      : Integer;
     CalculCle   : boolean;
     MChecksum    : extended;
     MMini, MDummy, Mcle : integer;
     TableB       : boolean;
     car           : char;
    ncar          : byte;
    i             : integer;
    interdit      : byte;
    ccar          : Array[1..2] of char;
    Dr  : TCBDirection;
    begin
    Chaine128 := Edit1.Text;
   interdit      := 0;
    Code128       := ”;
    if (Chaine128>”) then
       begin
       for i:=1 to length(Chaine128) do
        begin
           car := Chaine128 [i];
            if ((car>char(31)) and (car<char(127))) or (car=char(198)) then
            continue
                else
                   begin interdit:=ord(car);
                    break;
                 end;
        end; {for}
     if interdit=0 then
      begin
        Code128     := ”;
        tableB      := true;
        i           := 1;
        While i<=length(Chaine128) do
          begin
            if tableB then
             begin
                if (i=1) or ((i+3)=length(Chaine128)) then
                  MMini := 4 else MMini := 6;
                MMini := MMini – 1;
                if ((i + MMini) <= length(Chaine128)) then
                 begin
                   While MMini >=0 do
                    begin
                      car := Chaine128 [i+MMini];
                      ncar := ord(car);
                      if (ncar<48) or (ncar>57) then break;
                      MMini := MMini – 1;
                    end;{While MMini>0}
                 end; {if <= len}
               if (MMini<0) then   // Choix table C
                 begin
                  if i=1 then Code128 := char(210) else Code128 := Code128 + char(204);
                  tableB      := false;
                  end
                   else  if i=1 then Code128 := char(204);// char(209);
                 end; {if MMini<0}
Â
               if not tableB then
                begin
                 MMini := 2;
                 MMini := MMini – 1;
                 if ((i + MMini) <= length(Chaine128)) then
                   begin
                     While MMini >=0 do
                      begin
                       ccar [MMini + 1] := Chaine128 [i+MMini];
                       ncar          := ord(ccar [MMini+1]);
                       if (ncar<48) or (ncar>57) then break;
                       MMini := MMini – 1;
                      end;{While MMini >=0 }
                   end; {if ((i + MMini)}
                 if (MMini<0) then
                  begin
                   MDummy := StrToInt(ccar [1]+ccar [2]);
                   if MDummy<95 then
                      MDummy := MDummy + 32 else MDummy := MDummy + 100;
                   Code128 := Code128 + char(MDummy);
                   i:=i+2;
                  end
                   else
                     begin Code128 := Code128 + char(205);
                     tableB := true;
                   end;{if (MMini<0)}
              end;{if not tableB}
            if tableB then
             begin
               car    := Chaine128 [i];
               Code128 := Code128 + car;
               i:=i+1;
             end; {if tableB}
         end; {While i<=}
        // Calcul de la clé de contrôle
        CalculCle := true;
        if CalculCle then
         begin
          for i:=1 to length(Code128) do
           begin
             car    := Code128 [i];
             ncar   := ord(car);
             if (ncar<127) then ncar := ncar – 32 else ncar := ncar – 100;
             if (i=1) then MChecksum := ncar;
             MChecksum := MChecksum + ((i – 1) * ncar);
             MCle := trunc(MChecksum/103);
             MChecksum := trunc(MChecksum – (MCle * 103));
           end; {for }
          if (MChecksum<95) then MChecksum := MChecksum + 32 else MChecksum := MChecksum + 100;
          i      := trunc(MChecksum);
          Code128 := Code128 + char(i) + char(206);//char(211);
          Cle128 := i;
         end
          else Cle128 := 0;
Â
    end;{interdit=0 }
 end; {if Chaine128>”}
 Panel1.Caption := Code128;
Â
Â
Napisałem w Delphi XE bibliotekę DLL, która na komponencie TBitmap odpowiednio rysuje kod kreskowy. W razie zainteresowania zakupem proszę o kontakt emailowy.