Einzelnen Beitrag anzeigen

Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Epson TM-T70 USB Kassenschublade öffnen

  Alt 21. Mär 2014, 12:46
Hallo,

ich mache das über den Windows-Druckertreiber so:
Delphi-Quellcode:
function RawDataToPrinter(szPrinterName:PChar; lpData:PByte; dwCount:Word) : Boolean;
Var
  hPrinter : THandle;
  DocInfo : DOC_INFO_1;
  dwJob : Word;
  dwBytesWritten : Cardinal;
Begin
  Result:=False;
  if NOT OpenPrinter( szPrinterName, hPrinter, NIL ) then
    Exit;

  DocInfo.pDocName := 'RAWJOB';
  DocInfo.pOutputFile := NIL;
  DocInfo.pDatatype := 'RAW';

  dwJob := StartDocPrinter( hPrinter, 1, @DocInfo );
  if (dwJob = 0 ) Then begin
    ClosePrinter( hPrinter );
    Exit;
  end;


  if not StartPagePrinter( hPrinter ) then begin
    EndDocPrinter( hPrinter );
    ClosePrinter( hPrinter );
    Exit;
  end;


  if not WritePrinter( hPrinter, lpData, dwCount, dwBytesWritten ) then begin
    EndPagePrinter( hPrinter );
    EndDocPrinter( hPrinter );
    ClosePrinter( hPrinter );
    Exit;
  end;

  if not EndPagePrinter( hPrinter ) then begin
    EndDocPrinter( hPrinter );
    ClosePrinter( hPrinter );
    Exit;
  end;

  if not EndDocPrinter( hPrinter ) then begin
    ClosePrinter( hPrinter );
    Exit;
  end;

  ClosePrinter( hPrinter );

  Result:=dwBytesWritten = dwCount;
End;

function SwitchPrinter(const APrtName : string):string;
var
  Device,
    Driver,
    Port: array[0..255] of Char;
  DevMode: THandle;
begin
  with Printer do
  begin
    PrinterIndex := Printers.IndexOf(APrtName);
    GetPrinter(Device, Driver, Port, DevMode);
    SetPrinter(Device, Driver, Port, 0);
    result:=Printers[printerindex];
  end;
end;
procedure Tfrmmain.opendrawer(nr:integer);
Var
   FH:THandle;
   Buff: array[0..5] of char;
   RetW:DWORD;
   port:string;
   cmd:string;
   acmd:ansistring;
   p:pansichar;
begin
  // Anderer Code
  acmd:=#27#112#48#250#250;
  if dm.steuertext='Epson2then // 2. Schubladenanschluss
  acmd:=#27#112#49#250#250;
  p:=AnsiStrAlloc(length(acmd));
  p:=StrPCopy(p,acmd);
  switchprinter(dm.Steuertextdrucker); //Druckername
  rawdatatoprinter(pwidechar(dm.Steuertextdrucker),pbyte(p),length(acmd));
end;
Funktioniert - mit teilweise anderen Kommando (acmd) mit eigentlich allen Bondruckern.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat