Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.
Seite 1 von 3  1 23      

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