Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ESC-Sequenze für QR-Code (https://www.delphipraxis.net/186988-esc-sequenze-fuer-qr-code.html)

Thomas Feichtner 19. Okt 2015 12:39


ESC-Sequenze für QR-Code
 
Hallo,

hat schon jemand einen QR-Code auf einen Epson TM88 IV über ESC-Sequenzen gedruckt?

Leider komme ich mit der Beschreibung nicht recht weiter.

Diese Daten schicke ich an den Drucker:

Delphi-Quellcode:
function TfKTESCSequences.GetESCSequenceQRCode: String;
begin
  { Initialize printer }
  Result := #27 + #64;
  { Auf Drucker umschalten }
  Result := Result + #27 + #61 + #1;

  { Selectet print modes, Font A }
  Result := Result + #27 + #33 + #0 + 'Font A' + #27 + #33 + #0 + cCRLF;

  { Daten für QR }
  Result := Result + #29 + #40 + #107 + #4 + #0 + #49 +#65 + #50 + #0;
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#67 + #20; //#5
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#69 + #48;
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#80 + #48 + 'www.mgm.at';
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#81 + #48;

  { Print and feed n lines }
  Result := Result + #27 + #100 + #10;

  { Papier abschneiden }
  Result := Result + #29 + #86 + #1 + #0;
end;

Olli73 19. Okt 2015 13:18

AW: ESC-Sequenze für QR-Code
 
Mit deinem Epson-Drucker habe ich zwar keine Erfahrung, aber mit einem ähnlichen Drucker, der per Bluetooth an einem Android-Gerät genutzt wird.

Dabei hat es schon mal total geholfen, statt einem String ein Byetarray zu verwenden, denn z.B.(!) ein #0 steht für Stringende.

hathor 19. Okt 2015 14:53

AW: ESC-Sequenze für QR-Code
 
Dein "Result" ist ein ziemlicher Blödsinn!
Der Drucker wird X-mal initialisiert...

baumina 19. Okt 2015 15:03

AW: ESC-Sequenze für QR-Code
 
Zitat:

Zitat von hathor (Beitrag 1319081)
Dein "Result" ist ein ziemlicher Blödsinn!
Der Drucker wird X-mal initialisiert...

Pro Funktionsaufruf genau einmal. Oder was liest du da?

Thomas Feichtner 19. Okt 2015 15:47

AW: ESC-Sequenze für QR-Code
 
Jetzt funktioniert es bei mir.
Beim Drucken muss man die Länge mit übergeben
Delphi-Quellcode:
function TfKTESCSequences.GetESCSequenceQRCode: String;
var
  sText: String;
  iLength: INteger;
begin
  sText := 'Thomas kann QR-Code Drucken';
  iLength := length(sText);

  { Initialize printer }
  Result := #27 + #64;
  { Auf Drucker umschalten }
  Result := Result + #27 + #61 + #1;

  { Selectet print modes, Font A }
  Result := Result + #27 + #33 + #0 + 'Font A' + #27 + #33 + #0 + cCRLF;

  Result := Result + #29 + #40 + #107 + #4 + #0 + #49 +#65 + #50 + #0;
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#67 + #20; //#5
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#69 + #48;
  Result := Result + #29 + #40 + #107 + char(3 + iLength) + #0 + #49 +#80 + #48 + sText;
  Result := Result + #29 + #40 + #107 + #3 + #0 + #49 +#81 + #48;

  { Print and feed n lines }
  Result := Result + #27 + #100 + #10;

  { Papier abschneiden }
  Result := Result + #29 + #86 + #1 + #0;
Wobei die die Parameter für die Länge noch schöner gemacht werden müssen so wie in der Beschreibung. Sonst kann ich maximal 253 Zeichen drucken.

Hansa 19. Okt 2015 16:00

AW: ESC-Sequenze für QR-Code
 
QR-Code per ESC-Sequenz drucken das geht ? Ja, wäre nicht schlecht. Habe hier einen TMT88III und da ist allerdings im Handbuch nichts mit QR zu finden. Drucker initialisieren/rücksetzen ist übrigens <ESC>@ also in Delphi schon richtig mit #27 #64. Nur : das was danach kommt ist mir viel zu viel. Da gibts nochmalerweise nur : ESC + ?? zum Umschalten auf QR-Modus, dannn das was in den QR rein soll und noch Ende-Zeichen. Du hast aber da in das Result mind. 20 Zeichen verbaut. Warum ?

p80286 19. Okt 2015 16:21

AW: ESC-Sequenze für QR-Code
 
Bist Du sicher, daß das richtig ist?
Zitat:

Result := Result + #29 + #40 + #107 + char(3 + iLength) + #0 + #49 +#80 + #48 + sText;
Gefühlt wäre ...+#107+#3+chr(ilength)+#0.. sinnvoller?

und wie schon oben angemerkt, ein
Delphi-Quellcode:
Array of Byte
wäre nicht so fehleranfällig!

Gruß
K-H

Hansa 19. Okt 2015 17:37

AW: ESC-Sequenze für QR-Code
 
Das + 3 kommt wohl hiervon : ESC+CR+LF. Bei solchen Druckern muss man immer etwas anders denken. 8-) Noch zum "Result" in Delphi-Funktionen. Ich benutze das nicht. Man stelle sich mal vor, man brauche 30 Funktionen und fasst die in einer Unit zusammen. Dann sieht man ja vor lauter "Results" den Wald nicht mehr. :mrgreen: So schlimm ists ja nicht, aber ich verzichte darauf. Man kann der Funktion auch direkt einen Wert zuweisen, wie hier die ESC-Sequenz. Dazu brauche zumindest ich keine zusätzliche globale Variable namens "Result".

Dejan Vu 19. Okt 2015 19:11

AW: ESC-Sequenze für QR-Code
 
Zitat:

Zitat von Hansa (Beitrag 1319109)
...ich keine zusätzliche globale Variable namens "Result".

Äh... Bitte keinen Blödsinn verbreiten. Das kann keine globale Variable sein, weil...
Delphi-Quellcode:
Function Foo : String;
Begin
  Result := 'Non Global';
End;

initialization
  Result := 'Will not compile'
end.
Löblich ist Dein Ansatz zur Lesbarkeit. Ich würde die einzelnen ESC-Befehle als Konstanten ablegen, und parametrierte Befehle über eine Funktion abbilden, Dann würde so ein Result-Monstrum vielleicht so aussehen:
Delphi-Quellcode:
Function MyPrinterCommand : String;
begin
  Result := InitSequence
      + PrintAsQrBarcode('www.Foobar.com')
      + ForwardToEndOfPage
      + CutPaper;
end;

himitsu 20. Okt 2015 09:53

AW: ESC-Sequenze für QR-Code
 
Und dann geht besser gleich mal von
Delphi-Quellcode:
String
weg, denn mit Unicode kommt am Ende oft nur noch Mist raus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Seite 1 von 2  1 2      

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