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...