Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Post

Yo estoy a punto de iniciar un proyecto que incluira estas impresoras y lo había pensado mucho por el problema que tiene nuestro amigo el cual me resulta una completa ironía: Es mas díficil imprimir de la forma más simple.

Por ahí vi que te recomendaro usar secuencias de escape, lo cual me parece es tu mejor solución pero tienes que considerar que:

- con el Writeln de Delphi las secuencias de escape (#27) se descartan antes de llegar a la impresora (más bien lo hace windows) por lo que no importa que tantas secuencias mandes antes del texto, a la impresora solo llega el texto "pelón".

-Tendrás que imprimir directamente a la impresora, pero sin pasar por Windows

Lo puedes hacer de esta forma:
Código Delphi [-]

Procedure PWrite(s:String);
var PT :Integer;
     P   :Pchar;
Begin
   PT := FileOpen('lpt1',fmOpenWrite ); // Abrimos la impresora como un     archivo
   P   := PChar( s ); //convertimos la  cadena a un PChar
   FileWrite(PT,P^,length( s )); //escribimos a la impresora
   FileClose(PT);//cerrar el archivo de la impresora
end;

Uso:

// ..
// Definimos algunas constantes para las secuencias  de escape
const pNewLn    = #10 +#13;      // Salto de linea
         pBold       = #27 + 'E';       // Activar negrita
        pBoldOff     = #27 + 'F';      //Desactivar negrita
        pDouble     = #27 + 'W' +'1';  //Activar doble Ancho
        pDoubleOff = #27 + 'W' +'0'; //Desactivar doble ancho
        pFormSize  = #27 + 'C' +#10;//Definir tamaño de la hoja en líneas (en este caso es 10, pero se puede cambiar por el que necesitemos
        pFF= #12; // Salto de página

begin
  PWrite( pForm );
  PWrite( pBold + 'Pagina 1 ' +pBoldOff);
end;

Es un código muy simple pero de esta forma las secuencias de escape si son pasadas tal cual a la impresora. Ojo, como no estamos usando Windows para ello, no tenemos ninguna función del driver disponible por lo que tendremos que checar por nuestra cuenta si hay papel, tinta, etc. Pero para el caso de impresoras de ticket no es tan dificil.

La colocación de coordenadas la puedes usar con la secuencia de escape correspondiente (no me acuerdo ahorita cual es) hay una para mover la cabeza en X y otra en Y, tambien puedes simular esto enviando saltos de línea para las Y e imprimiendo espacios en blanco para las X.

A mi me funcionó de maravilla y para este tipo de impresión se me hace la forma mas sencilla. Además no importa si tienes el driver o no, de hecho funciona aunque no tengas ninguno instalado en Windows.

Ojala te sirva
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 06-09-2006
federicorl federicorl is offline
Miembro
 
Registrado: may 2006
Posts: 31
Poder: 0
federicorl Va por buen camino
Question salto de pagina

lo hice como indicaste con las secuencias de escape y funciono perfecto, en dos pcs, cuando trato en una tercera no funciona y es la misma impresora!, a que crees que se deba?

lo que sucede es que en esta nueva PC esta tiene WXP Profesional como la anterior, si empieza a imprimir pero no hace los saltos de pagina, lo curioso es que es la misma impresora, no el mismo modelo, la misma impresora, solo cambio el cable de una Pc a La otra, lo unico diferente es que esta pc no tiene impresoras instaladas, ya instale incluso una Impresora solo para probar si le faltaban los drivers (instale los drivers de la fx880 de epson , no la impresora real) y el problema persiste

te doy un ejemplo del codigo

const pNewLn = #10 +#13; // Salto de linea
pBold = #27 + 'E'; // Activar negrita
pBoldOff = #27 + 'F'; //Desactivar negrita
begin
PWrite(pNewLn );
PWrite(pNewLn );
PWrite(' hola como estas');
PWrite(pNewLn );
PWrite(pNewLn );
PWrite(' Preparando Prueba de Impresion');
PWrite(pNewLn );
PWrite(pNewLn );

Antes cree el procedure Pwrite

Procedure TForm1.PWrite(s:String);
var PT :Integer;
P :Pchar;
Begin
PT := FileOpen('lpt1',fmOpenWrite ); // Abrimos la impresora como un archivo
P := PChar( s ); //convertimos la cadena a un PChar
FileWrite(PT,P^,length( s )); //escribimos a la impresora
FileClose(PT);//cerrar el archivo de la impresora
end;

ojala me puedas ayudar
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con el Canvas de Impresion Delphi 5 cesarlopez Impresión 2 05-02-2006 18:41:07
Impresion de Tickets nasedo Impresión 2 14-06-2005 08:46:36
Problema al cerrar ventana de impresion salvanano Impresión 4 04-06-2005 20:21:20
impresion de tickets ronson Impresión 3 10-03-2004 06:46:03
Impresión de Tickets jmoran Impresión 4 04-02-2004 16:40:56


La franja horaria es GMT +2. Ahora son las 15:53:30.


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
Copyright 1996-2007 Club Delphi