![]() |
AW: [Bibliothek] Barcode für Delphi (Zint)
Nagut ... alle, die eine akute Google-Allergie haben, können auch in diesem Thread posten.
|
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. |
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 ); |
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; |
AW: [Bibliothek] Barcode für Delphi (Zint)
Danke!
Ist nun gefixt. Der Fehler lag sogar noch höher. :) |
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? |
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:
da "primary" 0-indexiert ist, müsste es aber wie folgt lauten:
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
Delphi-Quellcode:
fast direkt dahinter:
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
Delphi-Quellcode:
Die for-Schleife müßte entsprechen ebenfalls wie folgt lauten:
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;
Delphi-Quellcode:
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.
for i := 0 to 9 do
Meiner Ansicht nach müßte es wie folgt lauten:
Delphi-Quellcode:
Bin auch der Meinung, dass es ebenfalls einen Fehler in Funktion "maxi_do_primary_3" gibt, der aber nicht so dramatisch ist:
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;
Delphi-Quellcode:
In dem Zusammenhang ist mir aufgefallen, dass man bei "ZintTest.exe" nirgends den Wert von Primary eingeben kann (oder ich hab's nicht gefunden :?:)
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; |
AW: [Bibliothek] Barcode für Delphi (Zint)
Nachtrag zu meiner letzten Antwort:
In "zint_maxicode.pas" in Funktion "maxicode":
Delphi-Quellcode:
Da habe ich es jetzt selber nicht ganz richtig gemacht und auch noch einen Fehler eingebaut :oops:
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; 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:
Sorry für das Chaos! :wink:
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; |
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 |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz