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 27-01-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Question Como imprimir con precisión directamente sobre el Canvas de TPrinter

Saludos camaradas...

Hace un par de semanas desarrollé un par de aplicaciones para imprimir recibos de nómina, como era un poco complicado y no supe como hacerlo en Rave ni en QuickReport me dí a la tarea de hacerlo imprimiendo directamente sobre el Canvas de TPrinter, la cosa es que primero calculo cuantos pixeles son por cm. y despues hago cálculos para enviarlo en la posición correcta en el canvas de la impresora, la cosa es que no es muy preciso que digamos ... así que creo que estoy haciendo algo mal y pido de su ayuda para encontrar donde está el error, pongo un poco de código explicarme mejor:

Código Delphi [-]
var
  PixelsPerCMX, PixelsPerCMY: Real;   //Aquí guardo la relación de pixeles por cm. en el eje X y Y
  MargenX, MargenY: integer;    //Aquí guardo el margen en pixeles del Canvas de la impresora
  X, Y: integer;  // Para guardar la posición de donde se imprimirá
...
// Obtengo la relación de Pixeles por cm. en ambos ejes
PixelsPerCMX:= GetDeviceCaps(Printer.Handle, LOGPIXELSX) / 2.54;
PixelsPerCMY:= GetDeviceCaps(Printer.Handle, LOGPIXELSY) / 2.54; 
// Obtengo el tamaño de los márgenes del Canvas de TPrinter
MargenX:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
MargenY:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
...
Printer.BeginDoc;
...
//Imprimo...
X:= Round(PixelsPerCMX * 2.5) - MargenX  // Seteo X a 2.5 cm.
Y:= Round(PixelsPerCMY * 4.2) - MargenY // Seteo Y a 4.2 cm.
Printer.Canvas.TextOut(X, Y, 'Texto a 2.5 cm. del eje X y 4.2 cm. del eje Y');  // Se imprime con precisión
// Con estas medidas se imprime con precisión, pero si aumento X o Y se desfasa mucho p. ej.
X:= Round(PixelsPerCMX * 22.5) - MargenX  // Seteo X a 22.5 cm.
Y:= Round(PixelsPerCMY * 14.2) - MargenY // Seteo Y a 14.2 cm.
Printer.Canvas.TextOut(X, Y, 'Texto a 22.5 cm. del eje X y 14.2 cm. del eje Y');  // Se imprime sin precisión, en el papel de imprime aprox. en 22.3 y 14 cm. ... 2 mm. de diferencia
...
Printer.EndDoc;

Me imagino que algún error me está afectando, no de Printer sino de como convierto las medidas o de algún cálculo (he leído que es posible imprimir directamente sobre el canvas con mucha precisión).

Me gustaría que me orientaran si estoy haciendo bien mi proceso de impresión o si pudieran sugerirme otra manera de hacerlo...

Desde ya muchas gracias...
__________________
Herr Heins Faust
Responder Con Cita
  #2  
Antiguo 28-01-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Sigo probando y no logro aumentar la precisión
__________________
Herr Heins Faust
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
Canvas de cada pagina TPrinter LordSarevok C++ Builder 0 10-09-2007 10:19:16
¿Alguien sabe como imprimir directamente sin el Preview en FreeReport? maravert Impresión 1 08-03-2007 19:27:55
¿Como imprimir con el canvas ? judoboy Impresión 7 16-09-2006 16:27:22
Como Imprimir directamente en el Puerto de la Impresora en Red???? AGAG4 Varios 0 08-03-2005 00:19:23
Como imprimir por canvas un caracter de salto de linea buitrago Impresión 3 30-08-2004 11:10:05


La franja horaria es GMT +2. Ahora son las 15:56:33.


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