AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein cab Etikettendrucker Statusabfragen über USB
Thema durchsuchen
Ansicht
Themen-Optionen

cab Etikettendrucker Statusabfragen über USB

Ein Thema von Andidreas · begonnen am 24. Sep 2015 · letzter Beitrag vom 29. Sep 2015
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

cab Etikettendrucker Statusabfragen über USB

  Alt 24. Sep 2015, 13:36
Hallo zusammen,

wir verwenden in unserer Firma zum Druck von Etiketten (z.B. Versandkartonetiketten) Drucker der Firma cab.
In einem neuen Projekt haben wir die Drucker über USB angeschlossen.
Der Druck funktioniert wunderbar über die folgenden Funktion:

Delphi-Quellcode:
function fnPrintviaComputerPrinter(slPrinterCommands : TStrings; sPrintername, sDocumentName : String) : Boolean;

var
  hPrinter : THandle;
  kDocInfo : TDocInfo1;
  i : Integer;
  dwWritten : DWord;
  sRec : String;
  StringList : TStrings;

begin

  //Set Result
  Result := False;

  //Try with Printer from Function Call
  If Not WinSpool.OpenPrinter(PChar(sPrintername), hPrinter, nil) Then
  Begin
    //Try with Windows Default Printer
    Printer.PrinterIndex := -1;
     If Not WinSpool.OpenPrinter(PChar(Printer.Printers[Printer.PrinterIndex]), hPrinter, nil) Then Exit;
  End;

  //Spool Output Settings
  Try
    With kDocInfo Do
    Begin
      pDocName := PChar(sDocumentName);
      pOutputFile := nil;
      pDatatype := 'RAW';
      //pDatatype := 'TEXT'; --> only for FreePDF
    End;

    //Send Printer Commands to the Printer
    If (StartDocPrinter(hPrinter,1,@kDocInfo) = 0) Then Abort;
    Try
      For i := 0 to slPrinterCommands.Count -1 do
      Begin
        sRec := slPrinterCommands.Strings[i] + #13+#10;
        Result := WritePrinter(hPrinter,PAnsiChar(AnsiString(sRec)),Length(sRec),dwWritten);
        If Not Result Then Abort;
      End;
      Result := true;
    Finally
      EndPagePrinter(hPrinter);
    End;

  Finally
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  end;

  //Set Result
  Result := True;

end;
Nachdem Druck muss jetzt aber noch der Status des Druckers abgefragt werden.
Lt. Hersteller gibt es hierfür sogenannte ESC Kommandos...
Ein ESC Kommande sollte mir in einem String den genauen Status zurückgeben...

Aber wie kann ich über den USB Port diese Daten empfangen bzw. erhalten? Ich bin hier etwas ratlos wie ich das Thema angehen soll da ich sowas noch nie gemacht habe, auch meine Suchen ham mir bisher nicht auf die Sprünge geholfen...
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#2

AW: cab Etikettendrucker Statusabfragen über USB

  Alt 25. Sep 2015, 04:30
Google doch mal nach 'ExtEscape'..

Damit können ESC-Commandos direkt an den Drucker geschickt werden.
Angeblich mit Möglichkeit einer Rückgabe von Infos vom Drucker..
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: cab Etikettendrucker Statusabfragen über USB

  Alt 29. Sep 2015, 14:16
Vielen Dank für den Tipp...
Ich hab heute ExtEscape ausprobiert und Escape, aber in beiden Fällen kommen die Escape Befehle am Drucker nicht richtig an!

Ich Versuche gerade mein Glück mit CreateFile ... Hat hier schon jemand Erfahrungen damit gemacht?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: cab Etikettendrucker Statusabfragen über USB

  Alt 29. Sep 2015, 15:45
Mittlerweile bin ich über den folgendne Beitrag im Internet gestolpert:

http://www.entwickler-ecke.de/topic_..._102755,0.html

Der CreateFile() Funktioniert...

Wenn dann der WriteFile() Befehl kommt dann seh ich am Display des Druckers das er Daten empfangen hat, führt aber nicht den Escape Befehl aus der gesendet wurde...

Lt. den Infos die in der Unit stehen sollte der Escape Befehl in Hexadezimal übergaben werden und hier vermute ich meinen Fehler... Wie übergibt man einen ESCAPE f als Hexadezimalen Wert?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#5

AW: cab Etikettendrucker Statusabfragen über USB

  Alt 29. Sep 2015, 17:51
Hallo..

Die Unit benutzt einen STRING um die Befehle (wie ESC) an die Funktion zu Übergeben, anstelle von z.B. Array of Byte.

Das geht voll nach hinten los, wenn mal mehr Daten übertragen/empfangen werden, da die Konvertierung mit HEXToInt nunmal nur interger erzeugen kann, jedoch ein String beliebig lang sein kann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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