Ich habe verschiedentlich schon versucht Barcodes auf einem dafür speziell gekauften Etikettendrucker (hier Datamax E4203)auszudrucken (Siehe auch Diskussion in RAVE).
Dieser Drucker hat hat eingebauten Barcode-Zeichensätze (alle gängigen). Alle Windows-Druckertreiber filtern die Escapesequenzen, die man an den Drucker sendet, gnadenlos aus.
Für die Direktkontrolle gibt es in Delphi die Escape-Funktion. Eigentlich alle Beiträge in den verschiedenen Foren sprechen das Thema zwar an, die Beispiele laufen aber nicht.
Hier ist nun mein "Rezept" !
Es funktioniert getesteterweise unter NT4.0 und W2000.
<PRE>
Const STX = $#02;
CR = $#0D;
procedure TForm1.DirektDruck(Sender: TObject);
Var S : String;
Len : Word;
i : Integer;
begin // XX ist ein Platzhalter - er wird nachher durch das Move-Kommando plattgemacht !
S := 'XX' + STX + 'Deine Steuerzeichen|'; // STX = chr(2) (Start of Text)
S := S + '1e2203001000075C1234567890123|'; // Barcode 128 C
S := S + '1211000009000951234567890123|';
S := S + '161100000500012DATAMAX_E-4203|'; // Ein Text
S := S + '191100300300012Zieldrucker: '|'; // NOCH'N tEXT
S := S + 'E' + CR; // Das Cr und | sind spezifisch für Datamax-Drucker
For i := 1 to Length(S) do if (S[i] = '|') then S[i] := CR;
//********************* und jetzt kommt das Eingemachte *******************
Len := Length(S) - 2;
Move(Len,S[1],2);
Printer.BeginDoc;
Escape(Printer.Canvas.Handle,PASSTHROUGH,0,PChar(S ),Nil);
Printer.EndDoc;
//******************** Ende Eingemachtes **********************************
end;
</PRE>
.... ! Das schmale Fenster macht meine ganze Formatiererei zunichte !
Gutes Gelingen
Hubert Hartmann
Dieser Drucker hat hat eingebauten Barcode-Zeichensätze (alle gängigen). Alle Windows-Druckertreiber filtern die Escapesequenzen, die man an den Drucker sendet, gnadenlos aus.
Für die Direktkontrolle gibt es in Delphi die Escape-Funktion. Eigentlich alle Beiträge in den verschiedenen Foren sprechen das Thema zwar an, die Beispiele laufen aber nicht.
Hier ist nun mein "Rezept" !
Es funktioniert getesteterweise unter NT4.0 und W2000.
<PRE>
Const STX = $#02;
CR = $#0D;
procedure TForm1.DirektDruck(Sender: TObject);
Var S : String;
Len : Word;
i : Integer;
begin // XX ist ein Platzhalter - er wird nachher durch das Move-Kommando plattgemacht !
S := 'XX' + STX + 'Deine Steuerzeichen|'; // STX = chr(2) (Start of Text)
S := S + '1e2203001000075C1234567890123|'; // Barcode 128 C
S := S + '1211000009000951234567890123|';
S := S + '161100000500012DATAMAX_E-4203|'; // Ein Text
S := S + '191100300300012Zieldrucker: '|'; // NOCH'N tEXT
S := S + 'E' + CR; // Das Cr und | sind spezifisch für Datamax-Drucker
For i := 1 to Length(S) do if (S[i] = '|') then S[i] := CR;
//********************* und jetzt kommt das Eingemachte *******************
Len := Length(S) - 2;
Move(Len,S[1],2);
Printer.BeginDoc;
Escape(Printer.Canvas.Handle,PASSTHROUGH,0,PChar(S ),Nil);
Printer.EndDoc;
//******************** Ende Eingemachtes **********************************
end;
</PRE>
.... ! Das schmale Fenster macht meine ganze Formatiererei zunichte !
Gutes Gelingen
Hubert Hartmann
Comment