Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ASCII direkt an Etikettendrucker schicken (https://www.delphipraxis.net/32404-ascii-direkt-etikettendrucker-schicken.html)

tuxracer78 22. Okt 2004 16:28


ASCII direkt an Etikettendrucker schicken
 
Hallo,

folgendes Problem:
Ich habe hier einen Datamax Etikettendrucker inklusive Programmierhandbuch.
In dem Handbuch sind ASCII-Codes um den Drucker anzusteuern.
Meine Frage: Wie schicke ich aus meinem Programm heraus die ASCII-Daten direkt an LPT1?
Kann ich die Daten irgendwie direkt auf die Schnittstelle ausgeben?

Gruß

Gregor

Hansa 22. Okt 2004 16:33

Re: ASCII direkt an Etikettendrucker schicken
 
Schicke sie doch direkt auf den LPT1: Mit AssignFile, rewrite usw.

StefanDP 22. Okt 2004 16:45

Re: ASCII direkt an Etikettendrucker schicken
 
unter windows nt/xp solltest du lieber die "portio.dll" verwenden

tuxracer78 22. Okt 2004 16:52

Re: ASCII direkt an Etikettendrucker schicken
 
Hallo, danke für die schnelle Antwort.

Ich habe mal im Netz rumgesucht und das hier zusammengebaut:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tf: TextFile;
begin
  AssignFile(tf, 'LPT1');
  Rewrite(tf);
  WriteLn(tf, '<STX>L');
  WriteLn(tf, 'D11<CR>');
  WriteLn(tf, '1A00000001501000123456789<CR>');
  WriteLn(tf, '121100000000100Barcode A<CR>');
  WriteLn(tf, 'E');
  CloseFile(tf);
end;

end.
Diese ASCII-Sequenz soll, laut Programmierhandbuch einen Barcode a mit den Werten 0 bis 9 drucken.
Wenn ich die Schaltfläche drücke, tut sich aber rein gar nichts. Keine Reaktion vom Drucker.

Kann mir jemand helfen?

StefanDP 22. Okt 2004 17:00

Re: ASCII direkt an Etikettendrucker schicken
 
OS?
Win XP verhindert normalerweise ein direkten zugriff auf LPT etc. über writeln u. ähnliche funktionen

tuxracer78 22. Okt 2004 17:07

Re: ASCII direkt an Etikettendrucker schicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das OS ist Windows 2000.
Ich habe mal 2 Seiten aus dem Handbuch extrahiert, die beschreiben, wie man mit C auf den Drucker zugreift. Falls sich jemand mit C auskennt, wäre es nett, mir evtl. einen Lösungsansatz zu geben.
Diese DLL werde ich mir mal ansehen.

dizzy 22. Okt 2004 17:15

Re: ASCII direkt an Etikettendrucker schicken
 
Zitat:

Zitat von tuxracer78
Delphi-Quellcode:
  WriteLn(tf, '<STX>L');
  WriteLn(tf, 'D11<CR>');
  WriteLn(tf, '1A00000001501000123456789<CR>');
  WriteLn(tf, '121100000000100Barcode A<CR>');

In dem C-Programm werden '<CR>' nicht alss Strings übergeben, sondern sie sind bloß Platzhalter für die entsprechenden Steuerzeichen. Das hätte ich auch so vermutet.
Und da du mit WriteLn arbeitest, hast du ohnehin hinter jeder Zeile ein CR+LF, das da aber in der Form nicht hin gehört!

Probier mal:
Delphi-Quellcode:
  Write(tf, #02+'L');
  Write(tf, 'D11'+#13);
  Write(tf, '1A00000001501000123456789'+#13);
  Write(tf, '121100000000100Barcode A'+#13);

Gruss,
Fabian

StefanDP 22. Okt 2004 17:18

Re: ASCII direkt an Etikettendrucker schicken
 
In dem C-Beispiel wird außerdem noch der Standart Stream "stdaux" verwendet (com1). Der ist soweit ich weiß sowieso nur unter dos verfügbar!?

tuxracer78 22. Okt 2004 17:25

Re: ASCII direkt an Etikettendrucker schicken
 
Erstmal vielen Dank.

Das erste zu lösende Problem scheint zu sein, daß Windows 2000 mich nicht auf den LPT zugreifen läßt.
Werde mich erstmal um diese portio.dll kümmern.

Hansa 22. Okt 2004 17:29

Re: ASCII direkt an Etikettendrucker schicken
 
So wird das aber nie was. 8) :mrgreen: Wie soll der arme Kerl denn jemals etwas gedruckt kriegen ? :lol: Der Hauptfehler ist, daß der : bei LPT: vergessen wurde. :!: Suche mal eine Datei "LPT". Wetten daß es die gibt und genau das drin steht, was gedruckt werden sollte ?

Durch den : erkennt Windows, daß es eben keine Datei ist, sondern ein Gerät ! Und wie bereits gesagt, erkennt man an den spitzen Klammern <> , daß es sich um ein Steuerzeichen handelt.

Schreibe ich nun
Delphi-Quellcode:
writeln (tf,'TEST<CR>');
dann wird "TEST<CR>" im Klartext gedruckt. Nehme ich das <CR> aus dem string raus und ersetze es mit #13, so wird gedruckt :

Delphi-Quellcode:
TEST         // Wort drucken und Zeilenvorschub
<Leerzeile>  // #13 : noch ein Zeilenvorschub

Hansa 22. Okt 2004 17:34

Re: ASCII direkt an Etikettendrucker schicken
 
Zitat:

Zitat von tuxracer78
Das erste zu lösende Problem scheint zu sein, daß Windows 2000 mich nicht auf den LPT zugreifen läßt.
Werde mich erstmal um diese portio.dll kümmern.

Das erste stimmt nicht. Das zweite ist völlig unnötig. :wall:

tuxracer78 22. Okt 2004 17:47

Re: ASCII direkt an Etikettendrucker schicken
 
Also ungefähr so?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tf: TextFile;
begin
  AssignFile(tf, 'LPT:1');
  Rewrite(tf);
  Write(tf, #02+'L');
  Write(tf, 'D11'+#13);
  Write(tf, '1A00000001501000123456789'+#13);
  Write(tf, '121100000000100Barcode A'+#13);
  CloseFile(tf);
end;
Da tut sich aber immer noch nichts am Drucker.

dizzy 22. Okt 2004 17:53

Re: ASCII direkt an Etikettendrucker schicken
 
LPT1:

tuxracer78 22. Okt 2004 18:01

Re: ASCII direkt an Etikettendrucker schicken
 
Auch mit LPT1: druckt er nicht.

Ist schon seltsam.

Hansa 22. Okt 2004 18:01

Re: ASCII direkt an Etikettendrucker schicken
 
Nein, was soll der ganze Firlefanz ? :P

Zitat:

Zitat von tuxracer78
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tf: TextFile;
begin
  AssignFile(tf, 'LPT1:');
  Rewrite(tf);
  Writeln(tf,<BARCODE Beginn ESC Sequenz>+'1234567890123'+<BARCODE Ende ESC Sequenz>);
  CloseFile(tf);
end;
Da tut sich aber immer noch nichts am Drucker.

LPT1: 1 = die Zahl EINS !! Doppelpunkt dahinter !!

ohne das ln am Ende von write wird nichts gedruckt :!:

tuxracer78 22. Okt 2004 18:51

Re: ASCII direkt an Etikettendrucker schicken
 
Sorry, wenn ich mich etwas dämlich anstelle.
Könntest Du die Zeile:
Delphi-Quellcode:
Writeln(tf,<BARCODE Beginn ESC Sequenz>+'1234567890123'+<BARCODE Ende ESC Sequenz>);
etwas konkretisieren anhand meines Beispiels? Ich hab's mit und ohne <...> probiert.

Vielen Dank im Vorraus

Hansa 22. Okt 2004 19:00

Re: ASCII direkt an Etikettendrucker schicken
 
Zitat:

Zitat von tuxracer78
Ich hab's mit und ohne <...> probiert.

...und somit ist das Thema für mich vorerst erledigt. Hier steht alles, was man wissen muß. Und ich habe es so vereinfacht, daß es jeder verstehen müßte. Was soll ich denn "konkretisieren", wenn du nicht mal mit writeln zurechtkommst. 8)

tuxracer78 22. Okt 2004 19:35

Re: ASCII direkt an Etikettendrucker schicken
 
Jetzt lasst mich doch nicht hängen. Jeder steht mal auf dem Schlauch. :cry:

jfheins 22. Okt 2004 19:49

Re: ASCII direkt an Etikettendrucker schicken
 
Tipp:
Der Text in den spitzen Klammern (< und >) könnte ein Platzhalter sein,
für den du etwas einsetzen musst ...

Hansa 22. Okt 2004 19:51

Re: ASCII direkt an Etikettendrucker schicken
 
Wenn es Dir gelungen ist, mit writeln mind. 2 Zeilen richtig untereinander zu drucken, dann sehen wir weiter. :mrgreen: Ansonsten sind auch noch andere da. 8)

tuxracer78 22. Okt 2004 20:24

Re: ASCII direkt an Etikettendrucker schicken
 
Und noch ein Versuch :?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tf: TextFile;
begin
  AssignFile(tf, 'LPT1:');
  Rewrite(tf);
  Writeln(tf,'<STX>L');
  Writeln(tf,'D11<CR>');
  Writeln(tf,'1A00000001501000123456789<CR>');
  Writeln(tf,'121100000000100Barcode A<CR>');
  Writeln(tf,'E');
  CloseFile(tf);
end;

end.
Daß <CR> ein Steuerzeichen (carriage return) sein soll, ist mir schon verständlich. Habe auch mal versucht, daß <CR> wegzulassen.

Hier nochmal die original ASCII-Befehlsfolge:

A: Code 3 of 9
Valid Characters: 0-9, A-Z, - . * $ / + % and the space character.
Variable Length.
Valid bar widths: The expected ratio of wide to narrow bars can range from 2:1 to 3:1.
The following example prints a code 3 of 9 bar code with a wide to narrow bar ratio of 3:1:
<STX>L
D11<CR>
1A00000001501000123456789<CR>
121100000000100Barcode A<CR>
E

Gruss

Gregor

jfheins 22. Okt 2004 21:04

Re: ASCII direkt an Etikettendrucker schicken
 
Ich habe eine Idee ! :idea:

Delphi-Referenz durchsuchenWriteLn

tuxracer78 23. Okt 2004 08:24

Re: ASCII direkt an Etikettendrucker schicken
 
Was möchtest Du mir denn damit sagen ?
Daß WriteLn den Zeilenvorschub beinhaltet? Klär mich doch bitte auf, wenn ansonsten irgend etwas unlogisch wäre.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.

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