Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
Vamos ahora a crear un driver para nuestra impresora. Como los trabajos que normalmente realizaremos con una matricial son muy simples, instalaremos la impresora "Generico/Solo Texto". Los dibujitos y otras lindezas, se las dejamos a las impresoras de chorro de tintas. Son maravillosas para esos trabajos.

Podemos iniciar el asistente para instalar la impresora. El solo la instalará, utilizando los driver que el propio Windows trae por defecto.

La impresora genérica tiene la ventaja de que admite todos los papeles definidos en el servidor, mientras que si instalamos los especificos de nuestra impresora, es mas que probable que no admita todos los tamaños definidos y mucho menos nuestra definición de cheque.

Si todo ha ido bien, al terminar, tendremos definida nuestra impresora.

Yo aconsejo cambiarle el nombre. Eso de generico, es ( valga la redundancia) muy genérico. Además, seguro que a nuestros clientes les inspira mas confianza si ven un nombre mas explicito.

Por ejemplo, si hemos definido la impresora para hacer cheques, porque no llamarla "Cheques del Banco Pepito".

Si mas adelante, en el momento de imprimir, el programa le da a elegir varias impresoras, no dudará en señalar al Banco Pepito, si lo que quiere es imprimir sus cheques. Hay que ponerse al nivel del cliente y facilitarle la vida ( Cosa que desde luego el no hace, al pedirte el "mas dificil todavía").

Bien, cuando aparezca el icono de nuestra impresora, la remarcamos con el botón derecho del ratón. En la pestaña Presentación, Preferencias de Impresión, Papel/Salida: Ponemos Cheque.

En la pestaña Papel/Calidad:Alimentación Contínua: Sin pausa.

Si ahora remarcamos para que aprezcan las Propiedades, en la pestaña General, sale por defecto A4. Hemos de conseguir que aparezca "Cheque".

Para ello, vamos a la pestaña Configuración de dispositivo: Alimentación contínua: En todo lo que aparezca ponemos cheque. Pulsamos aplicar y así en la pestaña General, en papel disponible deberá aparecer la palabra Cheque.

Una vez definido el driver, deberemos comprobar que funciona. Cargamos Word, selecionamos esa impresora y en el menu de configurar pagina , en tamaño de papel buscamos cheque.

Como prueba, podemos escribir unos 3 o 4 cheques e imprimirlos aunque sea en una hoja A4. El caso es comprobar que el driver funciona perfectamente.

Si esto no sucede, repasar lo expuesto, pero antes de seguir adelante, hay que estar seguros de que la impresora reconoce el papel definido por nosotros.

Hasta ahora, hemos retocado a Windows, definiendo el papel en el Servidor y en la impresora.

Saludos y mañana ya nos meteremos con el tercer culpable.QReport.
Responder Con Cita
  #2  
Antiguo 28-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
Como lo prometido es deuda, vamos a "destripar" a QReport. La primera pregunta es ¿ y porque QReport ?.


Mi respuesta es: ¿ Y por qué no ?. Hasta la versión 7 de Delphi, Borland ha dado soporte a este generador de informes. Se compenetra muy bien con Delphi ( solo faltaba, esta escrito en Delphi) y puede hacer casi lo mismo que cualquier otro.

He trabajado con Cristal Report y no lo cambio por Qreport. Por lo menos en ambiente Delphi.

Una de los inconvenientes que mas se oye, es que no permite al usuario final diseñar sus informes, pero esto no es cierto... por lo menos en la versión profesional.

Ocurre que ( lo mismo con TeeChart) que la versión ofrecida gratis con Delphi es la versión light. Supongo que será un problema de costos y de no querer encarecer Borland su producto.

Politicas comerciales a parte, si se quiere hacer algo mas serio, yo recomiendo que se adquiera la versión profesional. Trae los fuentes o lo que es lo mismo, nos da la oportunidad de "retocarlo" a nuestro gusto.

De paso, podemos apreciar lo bien que programan los de QSoft. Como profesional, me quito el sombrero ante ellos y les digo "chapeau". Es una delicia leer sus fuentes. Las definiciones de clases, como utilizan la herencia, etc.

Si te gusta la OOP, solo por eso, deberias adquirir la versión profesional.

Las siguientes explicaciones se refieren a la versión Qrepor Pro 3.6.2.

Como siempre, espero que funciones en otras versiones pero no lo puedo asegurar porque no lo he probado.

saludos.
Responder Con Cita
  #3  
Antiguo 28-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
Para cada papel, Qreport debe terner definido su nombre y sus dimensiones. Por ejemplo: A4 tiene por dimensiones 210 por 297 mm.

Además a cada papel, le asigna un numero o código que es el que le pasa a la impresora, para que esta lo utilice.

En todo este proceso, estamos asumiendo que la impresora reconoce el tamaño de papel que queremos usar.

Por eso, al principio, construimos un driver de impresora genérico y comprobamos, por medio de Word u otro procesador de texto, que funcionaba, esto es, que nuestra impresora reconocía ese tamaño.

El problema esta en que no conocemos de antemano que codigo tiene ese tamaño de papel.

En la pagina web de qsoft www.qusoft.com, puedes ver a la izquierda una columna con el titulo

DIY Fixes.

Pulsando te aparecen una serie de respuestas a problemas.

Localiza "Adding new paper formats".

Prácticamente te explica todo el proceso.

Debes comenzar por bajarte el programa printercheck. Una vez descomprimido, te aparecerá PRDrive.exe.

Esta utilidad, mediante llamadas al API de Windows te indica el codigo del papel que queremos usar.

De paso, puedes leerte los fuentes y aprenderás mucho sobre el manejo de impresoras, etc. Lo recomiendo.

Para el papel que hemos definido, llamado cheque, en mi impresora matricial y con el driver genérico/solo texto, obtuve el código 123.

Naturalmente, este código variará en función de la impresora, driver y tipo de papel.

Con este dato, ya podemos retocar los fuentes.

Saludos.
Responder Con Cita
  #4  
Antiguo 28-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
No hace falta decir, que antes de retocar ningún fuente, debemos hacer unas buenas copias de seguridad por aquello de la Ley de Murphy.

Abrimos Delphi y cargamos el paquete qrpt70.bpl.

Me estoy refiriendo a la versión de Delphi 7.0 y a Qreport Pro 3.6.2.

Debo suponer, que será igual o muy parecido con otras versiones, pero yo no lo he hecho.

Desde el cuadro package, cargamos qr3const.pas

Al principio de la unidad podemos encontrar:

Código PHP:
resourcestring
  SqrPaperSize0 
= 'Default size';
  
SqrPaperSize1 = 'Letter 8 1/2 x 11 in';
  
SqrPaperSize2 = 'Letter Small 8 1/2 x 11 in';
  
SqrPaperSize3 = 'Tabloid 11 x 17 in';
  
SqrPaperSize4 = 'Ledger 17 x 11 in';
  
SqrPaperSize5 = 'Legal 8 1/2 x 14 in';
  
SqrPaperSize6 = 'Statement 5 1/2 x 8 1/2 in';
  
SqrPaperSize7 = 'Executive7 1/2 x 10 in';
  
SqrPaperSize8 = 'A3 297 x 420 mm';
  
SqrPaperSize9 = 'A4 210 x 297 mm';
  
SqrPaperSize10 = 'A4 Small 210 x 297 mm';
  
SqrPaperSize11 = 'A5 148 x 210 mm';
  
SqrPaperSize12 = 'B4 250 x 354 mm';
  
SqrPaperSize13 = 'B5 182 x 257 mm';
  
SqrPaperSize14 = 'Folio 8 1/2 x 13 in';
  
SqrPaperSize15 = 'Quarto 215 x 275 mm';
  
SqrPaperSize16 = '10x14 in';
  
SqrPaperSize17 = '11x17 in';
  
SqrPaperSize18 = 'Note 8 1/2 x 11 in';
  
SqrPaperSize19 = 'Envelope #9 3 7/8 x 8 7/8';
  
SqrPaperSize20 = 'Envelope #10 4 1/8 x 9 1/2';
  
SqrPaperSize21 = 'Envelope #11 4 1/2 x 10 3/8';
  
SqrPaperSize22 = 'Envelope #12 4 \276 x 11';
  
SqrPaperSize23 = 'Envelope #14 4 \276 x 11';
  
SqrPaperSize24 = 'C size sheet';
  
SqrPaperSize25 = 'D size sheet';
  
SqrPaperSize26 = 'E size sheet';
  
SqrPaperSize27 = 'Custom Size';
  
SqrPaperSize28 = 'Cheque';     // Esto es lo que añadimos. 
Por supuesto que en la unidad hay muchisimas mas constantes. Si queremos, podemos traducirlas a nuestro idioma, pero lo fundamental es que hemos añadido una nueva etiqueta para nuestro papel.
Responder Con Cita
  #5  
Antiguo 28-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
Mas complejos son los cambios a realizar en la unidad QRPrntr.pas, pero también secillos.


Código PHP:
type
  
{ All the known paper sizes }
  
TQRPaperSize = (Default,
                  
Letter,
                  
LetterSmall,
                  
Tabloid,
                  
Ledger,
                  
Legal,
                  
Statement,
                  
Executive,
                  
A3,
                  
A4,
                  
A4Small,
                  
A5,
                  
B4,
                  
B5,
                  
Folio,
                  
Quarto,
                  
qr10X14,
                  
qr11X17,
                  
Note,
                  
Env9,
                  
Env10,
                  
Env11,
                  
Env12,
                  
Env14,
                  
CSheet,
                  
DSheet,
                  
ESheet,
                  
Cheque, // Este es el nuevo tipo definido
                  
Custom); 

Posteriormente definimos esta constante:

Código PHP:
const
.
.
dmpaper_cheque = 123; // Nuestro codigo para nuestro papel 
Ahora definimos las dimensiones:
Código PHP:
 
   cQRPaperSizeMetrics 
: array[Letter..Cheque, 0..1] of extended =
      ((
215.9, 279.4), { Letter }
       (
215.9, 279.4), { Letter small }
       (
279.4, 431.8), { Tabloid }
       (
431.8, 279.4), { Ledger }
       (
215.9, 355.6), { Legal }
       (
139.7, 215.9), { Statement }
       (
190.5, 254.0), { Executive }
       (
297.0, 420.0), { A3 }
       (
210.0, 297.0), { A4 }
       (
210.0, 297.0), { A4 small }
       (
148.0, 210.0), { A5 }
       (
250.0, 354.0), { B4 }
       (
182.0, 257.0), { B5 }
       (
215.9, 330.2), { Folio }
       (
215.0, 275.0), { Quarto }
       (
254.0, 355.6), { 10X14 }
       (
279.4, 431.8), { 11X17 }
       (
215.9, 279.0), { Note }
       (
98.43, 225.4), { Envelope #9 }
       
(104.8, 241.3), { Envelope #10 }
       
(114.3, 263.5), { Envelope #11 }
       
(101.6, 279.4), { Envelope #12 - might be wrong !! }
       
(127.0, 292.1), { Envelope #14 }
       
(100.0, 100.0), { CSheet }
       (
100.0, 100.0), { DSheet }
       (
100.0, 100.0), { ESheet }
       (
175.0,  76.2)  { Cheque } // Esta es nuestra definición
        
); 
Por último definimos el array para trasladar los tamaños del papel al codigo de la impresora


Código PHP:
   cQRPaperTranslate : array[Default..Custom] of integer =
       (
0,
       
dmpaper_Letter,
       
dmpaper_LetterSmall,
       
dmpaper_Tabloid,
       
dmpaper_Ledger,
       
dmpaper_Legal,
       
dmpaper_Statement,
       
dmpaper_Executive,
       
dmpaper_A3,
       
dmpaper_A4,
       
dmpaper_A4Small,
       
dmpaper_A5,
       
dmpaper_B4,
       
dmpaper_B5,
       
dmpaper_Folio,
       
dmpaper_Quarto,
       
dmpaper_10X14,
       
dmpaper_11X17,
       
dmpaper_Note,
       
dmpaper_Env_9,
       
dmpaper_Env_10,
       
dmpaper_Env_11,
       
dmpaper_Env_12,
       
dmpaper_Env_14,
       
dmpaper_CSheet,
       
dmpaper_DSheet,
       
dmpaper_ESheet,
       
dmpaper_cheque, { obtenemos este valor, mirando en el codigo de la impresora } 
       $
100); 
Ya solo nos falta retocar la función :

Código PHP:
function QRPaperName(Size : TQRPaperSize) : string;
const
  
Names : array[Default..Custom] of string = (
   
SqrPaperSize0, SqrPaperSize1, SqrPaperSize2, SqrPaperSize3,
   
SqrPaperSize4, SqrPaperSize5, SqrPaperSize6, SqrPaperSize7,
   
SqrPaperSize8, SqrPaperSize9, SqrPaperSize10, SqrPaperSize11,
   
SqrPaperSize12, SqrPaperSize13, SqrPaperSize14, SqrPaperSize15,
   
SqrPaperSize16, SqrPaperSize17, SqrPaperSize18, SqrPaperSize19,
   
SqrPaperSize20, SqrPaperSize21, SqrPaperSize22, SqrPaperSize23,
   
SqrPaperSize24, SqrPaperSize25, SqrPaperSize26, SqrPaperSize27, SqrPaperSize28 { Esto eslo nuevo} );
 
begin
  Result 
:= Names[Size];
end; 

Recompilamos la libreria y la instalamos como de costumbre.
Responder Con Cita
  #6  
Antiguo 28-01-2005
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Poder: 0
jlmelida Va por buen camino
Si todo el trabajo se ha hecho bién, al diseñar un informe, usando la clase TQuickRep, en el inspector de objetos, en el apartado Page, podremos seleccionar el tamaño de papel definido por nosotros ( cheque en nuestro ejemplo).


Deberá tener las dimensiones definidas a nuestro gusto y además, un código que será entendido por nuestra impresora matricial.

Con ello, ya podremos usar tamaños de papel definidos por el usuario.

Saludos.
Responder Con Cita
  #7  
Antiguo 29-01-2005
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 23
vic_ia Va por buen camino
mi más sincera felicitación...!!!

una de las explicaciones mas simples y entendibles de las que he ledido aqui y en otros foros y sitios de programacion...

siempre he lidiado con escribir directamente al puerto por que no le hallaba por donde atacar el problema...

he llegado apenas a la definición del papel (excepcional por lo sencillo), y espero, el fin de semana completar los pasos y tener asi, la opcion de mejorar mis viejos y proximos proyectos...

gracias por la ayuda....
Responder Con Cita
  #8  
Antiguo 25-07-2006
JODELSA JODELSA is offline
Miembro
 
Registrado: may 2003
Posts: 89
Poder: 24
JODELSA Va por buen camino
Como modificar los fuentes de Qreport

Eres la persona que mas domina este tema y mira que he luchado mucho con este problema hasta el punto que me siente desesperado.

Yo pude crear la impresora y el formulario con las medida que necesito, tambien lo probé en Word y todo funiciono perfecto. lo que no he podido hacer es retocar los fuentes de QReport.

Si no es mucha molestia me podria explicar mejor como cargo el paquete
qrpt70.bpl

Nota: Uso delphi 7.0 y la version de Qreport que viene con este.




Cita:
Empezado por jlmelida
Si todo el trabajo se ha hecho bién, al diseñar un informe, usando la clase TQuickRep, en el inspector de objetos, en el apartado Page, podremos seleccionar el tamaño de papel definido por nosotros ( cheque en nuestro ejemplo).


Deberá tener las dimensiones definidas a nuestro gusto y además, un código que será entendido por nuestra impresora matricial.

Con ello, ya podremos usar tamaños de papel definidos por el usuario.

Saludos.
Responder Con Cita
  #9  
Antiguo 10-11-2007
ldmar3 ldmar3 is offline
Registrado
 
Registrado: nov 2007
Posts: 9
Poder: 0
ldmar3 Va por buen camino
nesesito ayuda para imprimir

oye nesesito una pequeña ayuda mira es que no se como imprimir en delphi tan solo serian unos campos en donde podria desplazarme facilmente para ingresar datos y luego imprimirlos no se si pasarlos a un dbgrid primeramente y despues imprimirlo pues ya que como me di cuenta desde el qreport se puede imprimir me darias una idea o me ayudarias por favor ya que vi que tu si te la sabes y pues seria chido que me ayudaras.. gracias



estare en contacto
Responder Con Cita
  #10  
Antiguo 10-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Hola, Bienvenido a ClubDelphi, como a todos, te recomiendo leas la guia de estilo, te ayudará a redactar tus preguntas.

-En delphi, File New -> Other -> QReport
-Necesitas un TQuery (TIBQuery, TMdoQuery, etc) para extraer los datos.
-En el quickreport, tienes su propiedad Bands, pon a true en el inspector de objetos el HasDetail.
- Enlaza el QuickReport con la query.
-Añade varios qrDBText, configura el dataset y el FieldName
- boton derecho y pulsa sobre Preview.

Podrás ver los resultados.

Si tienes dudas, abre un hilo nuevo, ya que aquí no va muy bien este tema.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 13-11-2007
ldmar3 ldmar3 is offline
Registrado
 
Registrado: nov 2007
Posts: 9
Poder: 0
ldmar3 Va por buen camino
otra duda

oye no me funciono ese procedimiento porque no tengo tquery o los otros objetos que me señalaste tal vezs porque tengo deplhi 5.0 o nada que ver
espero respuesta
Responder Con Cita
  #12  
Antiguo 15-08-2007
gatita gatita is offline
Registrado
 
Registrado: ago 2007
Posts: 1
Poder: 0
gatita Va por buen camino
Exclamation Fuente No Deseada Al Imprimir

Hola, me acabo de unir al Foro, muy interesante el tema, he seguido todos los pasos correctamente, pero tuve un problema con el driver generico: al imprimir sale todo pero no con la fuente deseada, y ademas no respecta los espacios en donde debe imprimirse el texto

Ayudenme porfis si?

Gracias anteladamente.
Responder Con Cita
  #13  
Antiguo 17-08-2007
josejm josejm is offline
Miembro
 
Registrado: abr 2006
Posts: 21
Poder: 0
josejm Va por buen camino
Post Fuentes no soportadas para Generica solo texto.

Segun decias "gatita" el problema surge cuando cambias los tipos de fuentes, algunos drivers genericos no soportan todas las fuentes, pero si es matricial deberias de imprimir con alguna courier o con otra similar.
El tema de los espacios supongo que sera porque al imprimir estaras indicando las posiciones en una medida diferente de la que esta cogiendo el QuickReport. Yo siempre lo paso a mm y nunca he tenido problemas

Visita pronto http://www.miranos.es aqui tendreis ejemplos mios y mucha información sobre delphi.
Gracias a club delphi por seguir aqui.

Última edición por josejm fecha: 17-08-2007 a las 16:35:48.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 01:12:49.


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