PDA

Ver la Versión Completa : Secuencia de Escape en Epson TM88III


Nose
16-04-2004, 16:01:03
Hola a todos!

Estoy de nuevo por acá, con otro nick eso sí.

Remitiendome al problema descargué de la page de la epson el faq de las secuencias de escapes de la Epson TM88III y tengo problemas para entender algunas especificaciones de él y ademas de adaptar el código que esta en basic:


PRINT #1, CHR$(&H1B);"@"; 'Initializes the printer (ESC @)
PRINT #1, CHR$(&H1B);"a";CHR$(1);'Specifies a centered printing position
'(ESC a)
PRINT #1, CHR$(&H1B);"!";CHR$(0); 'Specifies font A (ESC !)
PRINT #1, "January 14, 2002 15:00";
PRINT #1, CHR$(&H1B);"d";CHR$(3); 'Prints and 3 line feeding (ESC d)
PRINT #1, CHR$(&H1B);"a";CHR$(0); 'Selects the left print position (ESC a)
PRINT #1, CHR$(&H1B);"!";CHR$(1); 'Selects font B
PRINT #1, "TM-U210B $20.00";CHR$(&HA);
PRINT #1, "TM-U210D $21.00";CHR$(&HA);
PRINT #1, "PS-170 $17.00";CHR$(&HA);
PRINT #1, CHR$(&HA); 'Line feeding (LF)
PRINT #1, CHR$(&H1B);"!";CHR$(17); 'Selects double-height mode
PRINT #1, "TOTAL $58.00"; CHR$(&HA);
PRINT #1, CHR$(&H1B);"!";CHR$(0); 'Cancels double-height mode
PRINT #1, "------------------------------";CHR$(&HA);
PRINT #1, "PAID $60.00";CHR$(&HA);
PRINT #1, "CHANGE $ 2.00";CHR$(&HA);
PRINT #1, CHR$(&H1D);"V";CHR$(66);CHR$(0); 'Feeds paper & cut
?Drawer Kick (ESC p)
PRINT #1, CHR$(&H1B); CHR$(&H70); CHR$(&H0); CHR$(60); CHR$(120);



Esta instrucción, por ejemplo : PRINT #1, CHR$(&H1B);"a";CHR$(1);

¿cómo puedo convertirla en Delphi?

Esto no me resulta:
PRINT #1, CHR$(&H1B);"a";CHR$(1);
PRINT #1, CHR$(&H1B);"!";CHR$(0); 'Specifies font A (ESC !)
PRINT #1, "January 14, 2002 15:00";

lo convertí en:
Writeln ( f, #27 + 'a' + #49 );
Writeln (f, #27 + '!' + #48 );
Writeln (f, "January 14, 2002 15:00" );

Supuestamente lo que hace es centrar lo que se va escribir después, pero no resulta, simplemente aparece justificado a la izquierda

Después, intento convertir:
PRINT #1, CHR$(&H1B);"d";CHR$(3);

Esto imprime 3 saltos de líneas (ESC d), supuestamente, pero no lo hace

Writeln ( f, #27 + 'd' + #50);

Alguién puede ayudarme a convertirlo a Delphi todo este código, además de la secuencia de escape para imprimir código de barra que en el manual sale así, pero no se cómo interpretarlo:



? GS k m d1...dk NUL
? GS k m n d1...dn
[Name] Print bar code
[Format] ASCII ?GS k m d1...dk NUL
Hex ?1D 6B m d1...dk 00
Decimal ?29 107 m d1...dk 0
ASCII ?GS k m n d1...dn
Hex ?1D 6B m n d1...dn
Decimal ?29 107 m n d1...dn
[Range] ? 0 ? m ? 6 (k and d depend on the bar code system used)
? 65 ? m ? 73 (n and d depend on the bar code system used)
[Description] Selects a bar code system and prints the bar code.


Para el Codebar39 "m" = 4 el rango de "k" es 1<=k y el rango de "d" es 48 ? d ? 57,65 ? d ? 90, d = 32,36,37,43,45,46,47

Así que debería ser algo así :
Writeln ( f, #29 + #107 + '4' + '12345678' );

Pero, para variar no me resulta.

si alguien se apiade y me expliqué lo que estoy haciendo mal.

Gracias

guillotmarc
16-04-2004, 17:51:43
Hola.

En Basic, &H significa que el numero a continuación está en decimal. Por lo que CHR$(&H1B); equivale a CHR$(27); (1B es 27 en Hexadecimal).

Dicho esto, la línea


PRINT #1, CHR$(&H1B);"a";CHR$(1);


Equivale a


Writeln ( f, #27 + 'a' + #1 );


(Habías traducido mal CHR$(1) que equivale a #1).

Espero que estas indicaciones, te ayuden a traducir el código VB. En lo que respecta al Código Barras, la verdad es que tampoco entiendo la notación en que viene.

Saludos.

guillotmarc
16-04-2004, 17:58:52
Aunque en el código de barras, parece haber olvidado un 0 al final. Y m lo enviaría como nº y no como el ASCII del nº. Lo que no sé es si también es necesario para los nº que forman el código.

O sea, en lugar de :

Writeln ( f, #29 + #107 + '4' + '12345678' );

Probaría :

Writeln ( f, #29 + #107 + #4 + '12345678' + #0 );

O también (si no funciona) :

Writeln ( f, #29 + #107 + #4 + #1 + #2 + #3 + #4 + #5 + #6 + #7 + #8 + #0 );

Saludos.

roman
16-04-2004, 17:58:56
Estoy de nuevo por acá, con otro nick eso sí.

Hombre, ¡qué gusto! Y, ¿antes quien eras?

// Saludos

Nose
16-04-2004, 18:08:33
Gracias guillotmarc, probaré esas soluciones.


Hombre, ¡qué gusto! Y, ¿antes quien eras?

Jejeje! Roman, es que tuve problemas con algunos integrantes que ya no están ahora, menos mal, pero luego de dos años desaparecido por estos lares .... he vuelto

Salu2

jachguate
16-04-2004, 18:21:02
solo añadir, que me parece que es posible no tener que convertir los valores hexadecimales a decimales... ya que también debiera valerse un #$1B por ejemplo, en lugar de #27... no tengo delphi a mano, para probarlo, pero debiera funcionar y podria eviatar la conversión.

Hasta luego.

;)

Julià T.
16-04-2004, 23:05:27
Creo que la impresora citada tiene drivers para windows.
No sé si utilize la TM88 o TMT88

Nose
16-04-2004, 23:09:33
solo añadir, que me parece que es posible no tener que convertir los valores hexadecimales a decimales... ya que también debiera valerse un #$1B por ejemplo, en lugar de #27... no tengo delphi a mano, para probarlo, pero debiera funcionar y podria eviatar la conversión.

No se me había ocurrido usar #$, pensé que no se podía con Delphi

Creo que la impresora citada tiene drivers para windows.
No sé si utilize la TM88 o TMT88

Sí, si tiene Drivers para todos los sist. Op. de windows

Salu2

Julià T.
17-04-2004, 04:43:51
Sí, si tiene Drivers para todos los sist. Op. de windows
entonces le puedes asignar un tipo de fuente que se llama 'control' que combinado con el texto tendria que realizar la misma funcion que $1B

Nose
17-04-2004, 19:19:21
Hola, Julià T.

entonces le puedes asignar un tipo de fuente que se llama 'control' que combinado con el texto tendria que realizar la misma funcion que $1B
Eso no sé cómo hacerlo, es más intenté al comienzo usar la unit printer, pero no me resultaba la mayoría de las cosas, cómo el alineamiento de líneas, fuentes, etc.

Julià T.
18-04-2004, 04:54:39
Puede hacer una prueba sencilla para ver si funciona en esta impresora

Asignas como impresora predeterminada la epson tm88iii (para que salgan los tipos de fuentes própios de esta impresora)
Abres el wordpad, escribes texto y en algún sitio colocas el texto con la fuente control. Le das a imprimir y compruebas el resultado.

En esta impresora no lo probé nunca de hacerlo así, ya que utilizé para esta impresora el TRichEdit, el Qreport, y el Rave, con lo que me ahorré un montón de código

Tan solo añadir que lo afecta sorprendentemente a esta impresora es la combinación de fuente y tamaño a la hora de imprimir

Julià T.
18-04-2004, 04:59:22
por cierto el Rave (el reporteador que viene por defecto en elphi 7) tiene para imprimir códigos de barra

Nose
19-04-2004, 18:10:25
Bueno gracias a todos por tratar de ayudar :-)

lo sulucioné de la sgte. manera para el código de barra:


Writeln ( lst, #$1B + '@' );
Write ( lst, #$1D + 'h' + #$40 ); // Setea el alto
Write ( lst, #$1D + 'w' + #$2 ); // Setea el tamaño del ancho a 5
Write ( lst, #$1D + 'H' + #$2 ); // Seleccion la posición a imprimir
// codigo de barrras CODE39 -> ese es el tipo #$4
Write ( lst, #$1D + 'k' + #$4 ); // Imprime codigo de barras
Write ( lst, '1234567890123' + #$0 ); // siempre acaba con nulo
Write ( lst, #$A ); // limpia la justificación


Saludos

molinero1
15-06-2007, 12:41:45
La fuente de 'control' no aparece bajo ningún concepto, pongas la impresora como predeterminada o como si la pones sin conexión. Así que la única forma es programando porque si no no hay manera.

Nose
15-06-2007, 17:36:45
La fuente de 'control' no aparece bajo ningún concepto, pongas la impresora como predeterminada o como si la pones sin conexión. Así que la única forma es programando porque si no no hay manera.

Gracias, y has resucitado un post después de tres años :D

xio
12-11-2007, 17:44:20
Tengo el mismo problema que tuviste tu hace 3 años. Yo estoy intentando dominar la impresora EPSON TM-L-60II, y no lo consigo. He visto este hilo y parece que puede ayudarme aunque no lo he probado. Trabajo con Delphi 4 y he probado el codigo que a ti te sirvio como solucion y nada. Espero que podais ayudarme por que de verdad que ya no se que hacer.

xio
12-11-2007, 17:45:14
Se me olvidó decir que yo intento imprimir un codigo de barras del tipo EAN13.

xio
12-11-2007, 18:14:17
Este es el codigo que utilizo para imprimir el codigo de barras

AssignFile(f,'com2');
try
Rewrite(f);
Writeln ( f, #$1D + 'f' + #$1 ); //Esto es para seleccionar el tipo de caracteres HRI
Writeln ( f, #$1D + 'h' + #$20 ); // Setea el alto
Writeln ( f, #$1D + 'w' + #$2 ); // Setea el tamaño del ancho a 5
Writeln ( f, #$1D + 'H' + #$2 ); // Seleccion la posición a imprimir
//EAN13 -> #$2
Writeln ( f, #$1D + 'k' + #$2 ); // Imprime codigo de barras
Writeln ( f, '2690162200004' + #$0 ); // siempre acaba con nulo
finally
CloseFile(f);
end;

xio
12-11-2007, 18:29:48
Ya lo he consegido!

caifan_0883
19-03-2008, 20:02:51
Woow, Probare haber si me funciona. Saludos