No funciana mandar fichero txt a impresora con XE2
Hola a todos
Me surge un problema y haber si alguien me puede orientar.
Antes trabajaba con D6 y utilizaba una funcion (que pongo más abajo) para mandar a imprimir un fichero txt con códigos de escape de una zebra, hasta aquí todo bien y utilizo este método porque es muy rápido ante un quickreport y demás.
El problema viene cuando ahora estoy utilizando XE2 y utilizó la misma función, el compilador no dice nada pero no se imprime lo que mando. Yo creo que el problema tiene que ver con los arrays of char y unicode, pero la verdad no se por donde metermano.
Por eso os pidó ayuda.
procedure imprimir(const sFileName:string;impresora:integer);
const
iBufferSize = 32768;
var
Count, BytesWritten: Cardinal;
hPrinter, hDeviceMode: THandle;
sDevice : array[0..255] of Char;
sDriver : array[0..255] of Char;
sPort : array[0..255] of Char;
DocInfo: TDocInfo1A;
f: File;
pBuffer: Pointer;
begin
Printer.PrinterIndex := impresora;
Printer.GetPrinter(sDevice, sDriver, sPort, hDeviceMode);
if not WinSpool.OpenPrinter(@sDevice, hPrinter, nil) then
exit;
DocInfo.pDocName := 'Probando';
DocInfo.pDatatype := 'RAW';
DocInfo.pOutputFile := nil;
if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then
begin
WinSpool.ClosePrinter(hPrinter);
exit;
end;
if not StartPagePrinter(hPrinter) then
begin
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
exit;
end;
System.Assign(f, sFileName);
try
Reset(f, 1);
GetMem(pBuffer, iBufferSize);
while not eof(f) do
begin
Blockread(f, pBuffer^, iBufferSize, Count);
if Count > 0 then
begin
if not WritePrinter(hPrinter, pBuffer, Count, BytesWritten) then
begin
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
FreeMem(pBuffer, iBufferSize);
exit;
end;
end;
end;
FreeMem(pBuffer, iBufferSize);
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
finally
System.Closefile(f);
end;
end;
|