Finalmente buscando y rebuscando por Internet he encontrado la solución. Ahora ya envío comandos des del Delphi a la impresora.
Por si alguien le puede ser de ayuda aquí copio el código:
Código:
function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
PrinterHandle: THandle;
DocInfo: TDocInfo1;
i: Integer;
B: Byte;
Escritos: DWORD;
begin
Result:= FALSE;
if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
try
FillChar(DocInfo,Sizeof(DocInfo),#0);
with DocInfo do
begin
pDocName:= PChar('Printer Test');
pOutputFile:= nil;
pDataType:= 'RAW';
end;
if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
try
if StartPagePrinter(PrinterHandle) then
try
while Length(Str) > 0 do
begin
if Copy(Str, 1, 1) = '\' then
begin
if Uppercase(Copy(Str, 2, 1)) = 'X' then
Str[2]:= '$';
if not TryStrToInt(Copy(Str, 2, 3),i) then
Exit;
B:= Byte(i);
Delete(Str, 1, 3);
end else B:= Byte(Str[1]);
Delete(Str,1,1);
WritePrinter(PrinterHandle, @B, 1, Escritos);
end;
Result:= TRUE;
finally
EndPagePrinter(PrinterHandle);
end;
finally
EndDocPrinter(PrinterHandle);
end;
finally
ClosePrinter(PrinterHandle);
end;
end;
El problema que tengo ahora es que en el modelo de impresora que tengo (Zebra ZM400), sólo interpreta ordenes recibidas sobre el corte si está en modo de impresión Corte Demorado. Pues bien, cada vez que le envío algo a imprimir des de mi programa de Delphi me cambia automáticamente a Corte Manual y la instrucción de corte (~JK) la ignora. I la instrucción funciona bien, porqué si la ejecuto cuando he vuelto a poner la opción Corte Demorado sí que corta la etiqueta.
Utilizo las Fast Report 4 para generar la etiqueta que envio a la impresora. ¿Alguna idea de porqué me puede cambiar la configuración de la impresora?