Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   enviar codigos ESC a impresora (https://www.clubdelphi.com/foros/showthread.php?t=41088)

JuanHC 07-03-2007 13:54:00

enviar codigos ESC a impresora
 
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):
Código Delphi [-]
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 hay algunos ejemplos

JuanHC 07-03-2007 15:45:45

codigos a imprimir
 
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:
Código Delphi [-]
// 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

Cita:

Empezado por JuanHC
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.


La franja horaria es GMT +2. Ahora son las 06:58:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi