PDA

Ver la Versión Completa : enviar codigos ESC a impresora


JuanHC
07-03-2007, 13:54:00
Hola,
Necesito enviar los codigos de ESC a la impresora para la apertura del CAJON, CORTE DE TIQUET, Estos codigos se piden en campo EDIT

He probabo de varias formas, pero no consigo que me funcione, lo que envio me lo interpreta como si fuera un texto normal.

Agradeceria si alguien puede ayudarme.

seoane
07-03-2007, 13:58:16
No estaría de mas que pusieras el código que estas usando, y los códigos (el numero) que quieres mandar.

basti
07-03-2007, 15:00:36
Hay varias formas de enviar esos datos a la impresora.

Ejemplo de Abrir cajón (funciona en impresoras epson y compatibles):

var
f : TextFile;
CadenaCajon : string;

begin
CadenaCajon := chr(27) + chr(112) + chr(0) + chr(100) + chr(200);

AssignPrn(f);
Rewrite(f);
Write(f, CadenaCajon);
CloseFile(f);
end;

Onti
07-03-2007, 15:33:35
Aqui (http://www.clubdelphi.com/foros/showthread.php?t=4829&highlight=corte+impresora) hay algunos ejemplos

JuanHC
07-03-2007, 15:45:45
TIenes razon,

Los codigos que yo quiero enviar a la impresora son:

ESC + 'p 0 5 20'

es para que se abra el cajon portamonedas.

como he dicho antes, me lo interpreta como un texto,

LineaTexto = chr(27)+ 'p 0 5 20'
Writeln ( Fichero, LineaTexto);

seoane
07-03-2007, 16:44:01
Segun creo, lo que tienes que mandar a la impresora son los caracteres #27#112#0#5#20, siendo el #112 = 'p'. Esto no seria un problema, lo malo es si necesitas introducir los comandos en un edit, en otro hilo dí la siguiente solución al problema, espero que te sirva:

// Esta funcion decodifica una cadena, donde los caracteres no imprimibles
// estan sustituidos por % seguido de su valor hexadecimal.
function Decode(Str: string): string;
var
i: integer;
begin
Result:= '';
while Length(Str) > 0 do
begin
if Copy(Str, 1, 1) = '%' then
begin
if not TryStrToInt('$' + Copy(Str, 2, 2),i) then
begin
Result:= '';
Exit;
end;
Result:= Result + Char(i);
Delete(Str, 1, 2);
end else Result:= Result + Copy(Str, 1, 1);
Delete(Str,1,1);
end;
end;

// Por ejemplo para mandar Esc + p 0 5 20
LineaTexto = '%1Bp%00%05%14
Writeln ( Fichero,Decode(LineaTexto));

basti
07-03-2007, 17:12:50
LineaTexto = chr(27)+ 'p 0 5 20'
Writeln ( Fichero, LineaTexto);

Claro, es que lo que estás enviando es un texto, no los códigos correspondientes.

LineaTexto := chr(27) + 'p' + chr(0) + chr(5) + chr(20);

Fíjate que '0' no es lo mismo que chr(0). En el primer caso envías el carácter '0' (carácter número 48 de la tabla ASCII) a la impresora, eso te imprimirá un 0. En el segundo enviarás el carácter número 0 de la tabla ASCII, que en este caso se usa como carácter de control.

JuanHC
07-03-2007, 17:25:30
Gracias por vuestras respuestas. Creo que me servira.