Delphi-PRAXiS
Seite 3 von 4     123 4   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Bibliothek] Barcode für Delphi (Zint) (https://www.delphipraxis.net/143986-%5Bbibliothek%5D-barcode-fuer-delphi-zint.html)

0815achim 27. Sep 2013 07:53

AW: [Bibliothek] Barcode für Delphi (Zint)
 
@matashen

Du darfst nich Colorbox1.Color nehmen sondern Colorbox1.Selected.
Dann geht's

Gruß... 0815achim

Hoppla!
Sehe gerade das es in der Demo von Marco bereits richtig drin steht.

matashen 27. Sep 2013 09:04

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Ach ja, danke.

Ab und zu steht man einfach sowas von daneben

Carsten2 11. Okt 2013 14:00

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler, die ich gefunden habe:
zint.pas
in function hibc:
Code:
  //for i := 1 to _length do
  for i := 0 to _length-1 do //geändert
    Inc(counter, posn(TECHNETIUM, source[i])) ;
in function ZBarcode_Encode:
Code:
  if (symbol.input_mode = GS1_MODE) then
  begin
    //for i := 1 to _length do
    for i := 0 to _length-1 do //geändert
    begin
zint_aztec.pas
in function aztec_runes:
Code:
  //strcpy(binary_string, '');
  for i := 0 to 28-1 do binary_string[i]:=#0;//geändert
Code:
if (ecc_codewords[4 - i] and v) <> 0 then binary_string[j] := '1' else
  //binary_string[j + 1] := '0';
  binary_string[j] := '0';//geändert
wer veröffentlicht weitere? Danke!

HighBaer 11. Okt 2013 14:33

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Zunächst an Chaosben an den anderen des Teams: Klasse Arbeit! :thumb:

Mir ist da auch ein kleiner Fehler in Micro-QR aufgefallen:

Bei Auswahl der "Version 4" kommt es zu einer Zugriffsverletzung.

Ich denke der Fehler liegt daran, dass bei der Umwandlung von "TmqVersion" zu Option_2 Version 1 den Wert 1 hat usw.
intern wird aber mit den Werten 0 bis 3 gearbeitet. Wert 4 führt daher zu dem Fehler, ich vermute daher auch, dass bei Auswahl von "Version 2" in Wirklichkeit Version 3 angezeigt wird.

Der Fehler ist meine Meinung nach in "zint_qr.pas" in Funktion "microqr" (Zeile 2451):
Delphi-Quellcode:
   
// Get version from user
if((symbol.option_2 >= 1) and (symbol.option_2 <= 4)) then
begin
  if(symbol.option_2 >= autoversion) then
    //version := symbol.option_2; Originalzeile
    version := symbol.option_2 - 1; // geändert
end;

In der gleichen Funktion vorher in Zeile 2405 ist vermutlich auch was falsch, was aber nicht so gravierend ist:

Delphi-Quellcode:
   // Eliminate possible versions depending on error correction level specified
   ecc_level := LEVEL_L;
   if((symbol.option_1 >= 1) and (symbol.option_2 <= 4)) then
     ecc_level := symbol.option_1;
Sollte der 2. Vergleich nicht "symbol.option_1 <= 4" lauten, macht in meinen Augen mehr Sinn.

Ich hoffe, ich habe Euch damit weitergeholfen ...

Carsten2 11. Okt 2013 15:22

AW: [Bibliothek] Barcode für Delphi (Zint)
 
für MICRO QR gibt es meiner Meinung nach keine Feherkorr. HIGH.
mqv4 ist so also obsolet.

Code:
// Get version from user
if((symbol.option_2 >= 1) and (symbol.option_2 <= 3)) then // geänderet
Code:
// Eliminate possible versions depending on error correction level specified
ecc_level := LEVEL_L;
if((symbol.option_1>=1)and(symbol.option_1<=3))then ecc_level:=symbol.option_1;// geänderet
Ja Chaosben, vielen Dank für die Arbeit!:thumb:

stalkingwolf 11. Okt 2013 16:08

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Wird der Code wirklich gezeichnet?
Falls ja, dann bin ich gespannt wie das auf kleinen Etiketten ausschaut und gelesen werden kann.
Unsere Erfahrung auf z.b Zebra GK420&Co das es nicht funktioniert.
Bei einer Etikettengröße von z.b 30x25mm nicht oder nur sehr schlecht lesbar. Meisten Handscanner schmeißen das Handtuch ( wenn nicht vorher der Kassierer den Scanner geworfen hat :lol: ).

Wir sind daher auf Schriftarten umgestiegen und haben die jeweiligen Algorithmen einprogrammiert.

Ich lasse mich aber gern eines bessere belehren. Die Schriftartenlogik beherbergt auch so ihre Probleme.

LG
Sven

Carsten2 11. Okt 2013 19:53

AW: [Bibliothek] Barcode für Delphi (Zint)
 
weiterer Fehler

ZINT_QR.PAS
in function evaluate

Code:
// Test 4: Proportion of dark modules in entire symbol
  dark_mods := 0;
  for x := 0 to size - 1 do begin
    //for y := 0 to size do begin // geändert
    for y := 0 to size - 1 do begin // geändert

MarcoWarm 12. Okt 2013 10:20

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Hallo zusammen,
Und vielen Dank für die Fehlersuche. Ich werde mir das am Montag mal anschauen. Es wäre in der Zwischenzeit schön, wenn ihr die Fehlermeldung Bugtracker bei Google Code Posten könntet. Unserer Ansicht nach ist das der richtige Ort dafür. Ausserdem können wir dort gezielt auf jeden Fehler eingehen.
Schönes Wochenende
Von
Marco

chaosben 12. Okt 2013 13:21

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Danke für die Lobe und die Fehler! :)

Ausnahmsweise machen wir das heute mal kurz und unbürokratisch. Die Bugs sind in der aktuellen Revision gefixt.
Alles was ihr noch so findet, könnt ihr dann bitte hier posten.

Und nächste Woche sitzt dann Marco an der Hotline und ich mache Urlaub. :-D

Carsten2 17. Okt 2013 12:14

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Liebe Leut'

ich bin nicht bei Google und will es auch nicht sein.:thumb:
Ich verstehe leider nicht, warum hier nicht der richtige Ort sein soll, um auf Fehler im Quellcode hinzuweisen.
Gibt es eine andere (Google-)freie Möglichkeit?:coder:

chaosben 17. Okt 2013 12:37

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Nagut ... alle, die eine akute Google-Allergie haben, können auch in diesem Thread posten.

Codehunter 17. Okt 2013 12:52

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Google Code hat wahrscheinlich genauso viele Lorbeeren verspielt wie Sourceforge. Viele sind deshalb zu Github abgewandert. Mir ist das aber weitgehend Jacke wie Hose, ich bleibe wohl bei SF, nach kleineren Ausflügen zu GC mit mäßigen Ergebnissen.

Insofern ist es nicht schlecht, wenn man auch hier Feedback geben kann. Aus Sicht der Maintainer wäre es bei GC aber sicher einfacher.

Carsten2 17. Okt 2013 13:26

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Danke:thumb:

in unit zint_render_canvas;

ClearBackground mit Rectangle und Pen verursacht
verschobenen Hintergrund... (besonders bei kleiner Module-Grösse wie 1 auf TMetafilecanvas sichtbar)

Besser wie in DrawRect FillRect benutzen:
Code:
procedure TZintRenderTargetCanvas.ClearBackground(
  const AParams: TZintClearBackgroundParams);
begin
  FCanvas.Brush.Color:=FBGColor;
  FCanvas.Brush.Style:=bsSolid;
  //Canvas.Pen.Style:=psSolid; //geändert
  //FCanvas.Pen.Color:=FBGColor; //geändert

  //FCanvas.Rectangle(Round(AParams.X), //geändert
  FCanvas.FillRect(Rect(Round(AParams.X), //geändert
                        Round(AParams.Y),
                        Round(AParams.X + AParams.Width),
                        Round(AParams.Y + AParams.Height)
                        )//geändert
                        );

Carsten2 21. Okt 2013 21:19

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler
in unit zint_gs1
in function ugs1_verify:

"reduced" in ustrcpy benötigt Länge von "temp"...

Code:
  if (strlen(temp) < src_len + 5) then
  begin
    SetLength(reduced, src_len + 5); //hinzugefügt
    ustrcpy(reduced, ArrayOfCharToArrayOfByte(temp));
    Result := 0; exit;
  end;

chaosben 22. Okt 2013 08:06

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Danke!
Ist nun gefixt. Der Fehler lag sogar noch höher. :)

Carsten2 22. Okt 2013 15:37

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Danke zurück!:)

Aztec mit GS-1 funktioniert nicht richtig.
Fehler nicht gefunden!

in Function aztec_text_process:
Es fiel mir auf:
2 While-Schleifen in Repeat-Until geändert.
z.B.:
"while (i < (maplength - 1) do begin"
ist aber etwas anderes als
"until not (i < (map_length - 1));"

Warum "if (gs1 <> 0) and (i = 1) then"
statt "if(gs1 && (i == 0)) { " wie in aztec.c

Das alles verursacht aber nicht den Fehler:
in bctester_de.exe ergibt "[28] 1234567"
mit zint.pas "2#8 1234567"
mit zint.dll "]z128 1234567"
"]z1" ist wohl richtig, da es FNC1 ist.

Wer hat da eine Idee?

HighBaer 23. Okt 2013 12:07

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Hallo Leute,

ich bin mir nicht sicher, aber ich denke in "zint_maxicode.pas" sind noch ein paar Fehler drin.

Zuvor aber eine kurze Erläuterung über Maxicode Mode2 und Mode3, für die, die sich da nicht so auskennen.

Wenn ich es richtig verstanden habe, sind bei Mode2 und Mode3 in Primary u.a. die Postleitzahl kodiert:

Primary hat eine feste Länge von 15 Zeichen:

Mode2: 9 Ziffern (Postcode) + 3 Ziffern (Ländernummer) + 3 Ziffern (Class of Service)
Mode3: 6 Alphanumerische Zeichen (Postcode) + 3 Leerstellen(?*) + 3 Ziffern (Ländernummer) + 3 Ziffern (Class of Service)

?* = Bin mir nicht sicher, da ich nirgends gefunden habe, dass die "Lücke" mit Leerstellen aufgefüllt werden müssen oder bei Mode3 die Ländernnummer und Class of Service sich direkt hinter dem Postcode stehen. Die Routine geht aber davon aus, dass der Ländercode immer an den Stellen 10 bis 12 steht.

Nun zu den vermutlichen Fehlern:

In der Funktion "maxicode":


Delphi-Quellcode:
    for i := 10 to 14  do
    begin { check that country code and service are numeric }
      if ((symbol.primary[i] < '0') or (symbol.primary[i] > '9')) then
      begin
da "primary" 0-indexiert ist, müsste es aber wie folgt lauten:
Delphi-Quellcode:
    for i := 9 to 14  do // geändert
    begin { check that country code and service are numeric }
      if ((symbol.primary[i] < '0') or (symbol.primary[i] > '9')) then
      begin
fast direkt dahinter:

Delphi-Quellcode:
    postcode := symbol.primary;

    if (mode = 2) then
    begin
      for i := 1 to 10 do
        if (postcode[i] = ' ') then
          postcode[i] := #0;
    end
    else if (mode = 3) then
      postcode[7] := #0;
Die for-Schleife müßte entsprechen ebenfalls wie folgt lauten:
Delphi-Quellcode:
      for i := 0 to 9 do
Wenn aber ein 9-stelliger Postcode angegeben ist, dann gibt es keine Leerstelle in der Variablen "postcode" und da nicht nur die ersten 9 Stellen von "primary" nach "postcode" kopiert wurden, sondern der komplette Inhalt von "postcode" stehen da nun 15 Ziffer hintereinander, was falsch ist.

Meiner Ansicht nach müßte es wie folgt lauten:
Delphi-Quellcode:
    if (mode = 2) then
    begin
      for i := 0 to 9 do // geändert
        if (postcode[i] = ' ') then
          postcode[i] := #0;
      postcode[10] := #0; // neu
    end
    else if (mode = 3) then
      postcode[7] := #0;
Bin auch der Meinung, dass es ebenfalls einen Fehler in Funktion "maxi_do_primary_3" gibt, der aber nicht so dramatisch ist:

Delphi-Quellcode:
  h := ustrlen(postcode);
  to_upper(postcode);
  // for i := 1 to h do falsch?
  for i := 0 to h-1 do // oder ?
  begin
    if ((Chr(postcode[i]) >= 'A') and (Chr(postcode[i]) <= 'Z')) then
      { (Capital) letters shifted to Code Set A values }
      Dec(postcode[i], 64);

    if (postcode[i] = 27) or (postcode[i] = 31) or (postcode[i] = 33) or (postcode[i] >= 59) then
      { Not a valid postcode character }
      postcode[i] := 32;

    { Input characters lower than 27 (NUL - SUB) in postcode are
    interpreted as capital letters in Code Set A (e.g. LF becomes 'J') }
  end;
In dem Zusammenhang ist mir aufgefallen, dass man bei "ZintTest.exe" nirgends den Wert von Primary eingeben kann (oder ich hab's nicht gefunden :?:)

HighBaer 23. Okt 2013 12:34

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Nachtrag zu meiner letzten Antwort:

In "zint_maxicode.pas" in Funktion "maxicode":

Delphi-Quellcode:
    postcode := symbol.primary;

    if (mode = 2) then
    begin
      for i := 0 to 9 do // geändert
        if (postcode[i] = ' ') then
          postcode[i] := #0;
      postcode[10] := #0; // neu
    end
    else if (mode = 3) then
      postcode[7] := #0;

    countrystr[0] := symbol.primary[9];
     countrystr[1] := symbol.primary[10];
     countrystr[2] := symbol.primary[11];
     countrystr[3] := #0;

    servicestr[0] := symbol.primary[12];
     servicestr[1] := symbol.primary[13];
     servicestr[2] := symbol.primary[14];
     servicestr[3] := #0;
Da habe ich es jetzt selber nicht ganz richtig gemacht und auch noch einen Fehler eingebaut :oops:

Die for-Schleife muss natürlich "for i := 0 to 8" und die Zuweisung "postcode[9] := #0;" lauten.

Da "postcode" und "symbol.primary" beides dynamische Arrays sind, zeigen nach der Zuweisung "postcode := symbol.primary;" beide Variablen auf den gleichen Speicher. Daher überschreibt die Anweisung "postcode[9] := #0;" implizit den den Wert "symbol.primary[9]" und macht dadurch "countrystr[0]" falsch. Also muss entwender die Zuweisung "postcode := symbol.primary;" richtig "postcode := copy(symbol.primary);" lauten oder der Code muss umgestellt werden.

Jetzt hoffentlich richtig:

Delphi-Quellcode:
    postcode := copy(symbol.primary);

    if (mode = 2) then
    begin
      for i := 0 to 8 do // geändert
        if (postcode[i] = ' ') then
          postcode[i] := #0;
      postcode[9] := #0; // neu
    end
    else if (mode = 3) then
      postcode[7] := #0;

    countrystr[0] := symbol.primary[9];
     countrystr[1] := symbol.primary[10];
     countrystr[2] := symbol.primary[11];
     countrystr[3] := #0;

    servicestr[0] := symbol.primary[12];
     servicestr[1] := symbol.primary[13];
     servicestr[2] := symbol.primary[14];
     servicestr[3] := #0;
Sorry für das Chaos! :wink:

Carsten2 23. Okt 2013 22:54

AW: [Bibliothek] Barcode für Delphi (Zint)
 
ja genau!
in function maxicode

Code:
    //postcode := symbol.primary;//geändert
    for i := 0 to 8 do postcode[i] := symbol.primary[i];/geändert
    postcode[9] := #0;//geändert

Carsten2 25. Okt 2013 15:00

AW: [Bibliothek] Barcode für Delphi (Zint)
 
ja gefunden:!: - den Fehler in code32 :-D

unit zint_medical;
in { Italian Pharmacode }
function code32

Code:
 { Look up values in 'Tabella di conversione' }
  //SetLength(tabella, 32);//Alt
  SetLength(tabella, 33);//Neu

Carsten2 28. Okt 2013 16:33

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler nicht gefunden::(
EAN-14 und NVE-18:
mit "1234567" Unterschied mit zint.pas und zint.dll
mit "1234568" ist das Ergebnis jedoch gleich.

Liegt wohl an check_digit bzw. nve_check im den
Funktionen ean_14 bzw. nve_18 in der Unit zint_code128.pas

Hat einer eine Idee:?:

In Maxicode Mode 3 gibt es auch den Unterschied mit zint.pas und zint.dll:
z.B. Data "123456" und Primary "123456000123123":!:

Carsten2 28. Okt 2013 19:17

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler gefunden::):)
EAN-14 und NVE-18:

in ean_14 und nve_18 in der Unit zint_code128.pas

in function nve_18
Code:
    //if((i and 1) <> 0) then //Alt
    if((i and 1) = 0) then //Neu
      Inc(total_sum, 2 * StrToInt(Chr(source[i])));
in function ean_14
Code:
    //if ((i and 1) <> 0) then //Alt
    if ((i and 1) = 0) then //Neu
      Inc(count, 2 * StrToInt(Chr(source[i])));
:lol:

chaosben 29. Okt 2013 10:37

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Vielen Dank (mal wieder) für die gute Zuarbeit!
Die gefixte Version ist im SVN.

Noch ein paar Kommentare:
  • Fehler in aztec_text_process: Ja, der Index müsste der Bösewicht gewesen sein.
  • Fehler in maxicode: Ja, da waren die Indices falsch. Für Mode 3 muss man die ersten Zeichen selbst mit Leerzeichen auf 9 Stellen auffüllen. Und die Zuweisung der Arrays war wirklich blöd. :pale:
  • Fehler in code32: Wird jetzt (wie im C-Code) auf die Länge 34 gesetzt.
  • Checksumme in EAN14/NVE18: Die alte Variante (über zint.dll) beinhaltet noch den Original-Bug. Die zint.pas sollte es ganz richtig machen. :wink:

Carsten2 29. Okt 2013 14:24

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Vielen Dank!

gerade zeigt der Zeiger erneut ins Leere::(
tritt in Composite EAN Linear mit Primary-Länge kleiner 12 auf:

unit zint_composite;
{ CC-A 2D component }
function cc_a(
Code:
  //dummy : array[0..4] of Integer;//Alt
  dummy : array[0..5] of Integer;//Neu
da cc_width > 3 sein kann und da macht es hier bum:
Code:
    for j := 0 to 4 do //Alt
    if cc_width > 4 then cc_width := 4; //Neu
    for j := 0 to 5 do //Neu
      dummy[j] := 0;
    for j := 0 to cc_width - 1 do
      dummy[j + 1] := codeWords[i * cc_width + j];
keine gute Fehlerbehebung :(
Kann man mit Error wohl besser abfangen...:?:

chaosben 30. Okt 2013 08:09

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Das kann ich grad nicht nachvollziehen.
Wenn cc_width gleich 4 ist, dann läuft die Schleife (j) bis 3 (cc_width - 1) und schreibt maximal an die Stelle 4 (j + 1).
Das ist sollte das dummy-array aber vertragen.

Kannst du mal bitte die Daten (Primary und Daten) posten, mit denen der Fehler auftritt?

Carsten2 30. Okt 2013 11:32

AW: [Bibliothek] Barcode für Delphi (Zint)
 
ja stimmt.
aber cc_width kann grösser 4 sein.
zB. bei Data: "[78] 1234" Primary: "12345678905"
Vielleicht gibt es die Werte nicht,
aber ich möchte bei falschen Werten den "Absturz" verhindern.
Zint Barcode Studio 2.4 verabschiedet sich bei diesen Werten ganz.:(

So mogel' ich simpler ;-)
Code:
if cc_width > 4 then cc_width := 4; //Neu
Der Fehler liegt vorher - ein cc_width grösser 4.

Nützt alles nichts.
Die Werte lassen bei Mode CC-B das Programm in die Knie gehen.
Und zwar diesmal hier:

function cc_b:
Code:
for j := 0 to symbol.option_2 - 1 do
      dummy[j + 1] := chainemc[i * symbol.option_2 + j];

Carsten2 30. Okt 2013 12:45

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler/Absturz abgefangen::)

function composite:
Code:
case symbol.symbology of
    { Determine width of 2D component according to ISO/IEC 24723 Table 1 }
    BARCODE_EANX_CC:
    begin
      case pri_len of
        7, { EAN-8 }
        10, { EAN-8 + 2 }
        13: { EAN-8 + 5 }
          cc_width := 3;
        12, { EAN-13 }
        15, { EAN-13 + 2 }
        18: { EAN-13 + 5 }
          cc_width := 4;
        else //Neu
        begin //Neu
          concat(symbol.errtxt, 'Input wrong length in linear component'); //Neu
          result := ZERROR_INVALID_DATA; exit; //Neu
        end; //Neu
      end;
    end;

chaosben 31. Okt 2013 11:21

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Sehr gut! Danke für die gute Zuarbeit. :-D

Carsten2 31. Okt 2013 20:48

AW: [Bibliothek] Barcode für Delphi (Zint)
 
function maxicode(

postcode[9] := #0; wurde vergessen, sonst gibt's Probleme in maxi_do_primary_2.


Code:
    ArrayCopy(postcode, symbol.primary);
    postcode[9] := #0;//Neu

    if (mode = 2) then
    begin
      //for i := 0 to 9 do //Neu
      for i := 0 to 8 do //Neu

Carsten2 31. Okt 2013 22:12

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Deswegen wurde in maxicode latin1_process nochmals aufgerufen:

function latin1_process
Code:
      if (source[i] = $C2) then
      begin
        preprocessed[j] := source[i + 1];
        if (preprocessed[j] < 128) then begin //Neu
          Inc(j);
          next := i + 2;
        end; //Neu
      end;
      if(source[i] = $C3) then
      begin
        preprocessed[j] := source[i + 1] + 64;
        if (preprocessed[j] < 128) then begin //Neu
          Inc(j);
          next := i + 2;
        end; //Neu
      end;

chaosben 1. Nov 2013 09:34

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Danke!

Das mit dem Array_Copy und dem #0 an 9. Stelle habe ich gefixt.
Deinen zweiten Vorschlag in der latin1_process verstehe ich nicht. Kannst du mir das ein bisschen erklären? (bin grad schwer von Begriff)

Carsten2 1. Nov 2013 12:07

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Das Ergebnis von latin1_process soll sein, dass jedes preprocessed[j] kleiner 128 ist!
Ist es aber erst bei zweimaligem Aufruf der Funktion oder eben mit meiner Änderung.
Teste es mit einem "ü"! Der veränderte latin1_process meldet den Fehler beim ersten Aufruf.

Oh je, ich lese gerade "ü" gehört zu latin-1.
Also vergesst meine Änderung!
Deswegen exitiert jetzt der Fehler nur in der zint.dll bei Maxicode.

Carsten2 4. Nov 2013 13:55

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler in unit zint_upcean

in function eanx
local_source kann länger als 20 sein:
So tritt der Zeigerfehler jedenfalls nicht mehr auf!?
tritt auf mit BARCODE_EANX_CC Primary "012345678905+123", also falscher Add-on Länge...

Code:
  //SetLength(local_source, 20);//Alt
  SetLength(local_source, 41);//Neu

  //for reader := 0 to ustrlen(local_source) do //Alt
  //  if (source[reader] = Ord('+')) then with_addon := TRUE;//Alt
  for reader := 0 to ustrlen(local_source) - 1 do //Neu
    if (local_source[reader] = Ord('+')) then with_addon := TRUE;//Neu
in upcean.c ebenfalls bis <=!?

in procedure upce
noch einen:
Code:
  //for i := 0 to ustrlen(source) do //Alt
  for i := 0 to ustrlen(source)-1 do //Neu
    case Chr(parity[i]) of
      'A': lookup(NEON, EANsetA, source[i], dest);
      'B': lookup(NEON, EANsetB, source[i], dest);
    end;
in upcean.c ebenfalls bis <=!?

chaosben 6. Nov 2013 11:39

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Sehr gut! Danke! :)

Carsten2 12. Nov 2013 17:39

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Fehler in allen Composite Symbols
in Mode CC B bzw CC C:
Der PDF417-Part ist nicht identisch mit dem der Zint.dll
im Mode CC A ist alles OK!

2.
mehrere Zeigerfehler bei zsRSS_EXPSTACK
Data: "[28]1" oder "[28]123456"

meine Korrekturen, die Absturz verhindern, aber ein bisschen willkürlich sind:
unit zint_rss;
function rss_binary_string:
Code:
  SetLength(general_field, strlen(source) + 10);//geändert + 10
  SetLength(general_field_type, strlen(source) + 10);//geändert + 10
  SetLength(padstring, 40 + 10);//geändert + 10
function rssexpanded:
Code:
  SetLength(reduced, src_len + 20);//geändert + 20
  SetLength(binary_string, 7 * src_len + 7 * 20);//geändert + 7 * 20
3. Fehler korrigiert:
function rss_binary_string:
Code:
    4: begin concat(binary_string, '0101'); read_posn := strlen(source); end;
    //5: begin concat(binary_string, '0110XX'); read_posn := 20; end;//Alt
    5: begin concat(binary_string, '01100XX'); read_posn := 20; end;//Neu
    6: begin concat(binary_string, '01101XX'); read_posn := 23; end;

Carsten2 29. Nov 2013 13:55

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Björk: It's so quiet...

Habe bisher den Fehler in den Composites nicht gefunden!

Oder ist da gar keiner mehr? ;-)

chaosben 3. Dez 2013 12:28

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Theoretisch sollte es keine Fehler mehr geben. ;)

Carsten2 3. Dez 2013 13:33

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Leider gibt es bei mir eine Differenz zwischen Theorie und Praxis ;-)

Alle Composites mit Modus CC-B unterscheiden sich weiterhin von denen mit der Zint.dll.

... und ich weiss nicht warum :-(

chaosben 3. Dez 2013 16:34

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Da hat einer aber mal wieder Recht gehabt! ;)
Diese Differenzen sollten jetzt nicht mehr auftreten.

Carsten2 3. Dez 2013 17:07

AW: [Bibliothek] Barcode für Delphi (Zint)
 
Schön, dass die Differenzen verschwunden sind. ;-)
Der Fehler lag also in der zint_pdf417.pas!
Vielen Dank für die neuerliche Verbindung von Theorie und Praxis!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 3 von 4     123 4   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz