Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Diseño de informe vista

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Diseño de informe vista Responder citando

Sigo con mi empeño de crear un creador de Reports en tiempo de ejecución Drag & Drop. Tengo la siguiente duda con el tema de Pixels y MM. Encontre lo siguiente:
Código:
Pixeles no tiene que ver con milimetros de acuerdo a tu pregunta,
pues es sencillo: Para explicate de manera sencilla: pixel vendria
a ser un punto en tu monitor, tu lo puedes configurar por ejemplo: 640 x 480,
800 x 600, 1024 x 768, etc. Tu no puedes medir en pantalla con una regla,
pues hay monitores grandes y chicos con la misma resolucion en cuanto
a pixeles. Ahora si tu lo que quieres es imprimir en una hoja la pantalla
si puedes buscar una relacion. Primero ve (Form1->PixelPerInch) en cuanto
está en tu aplicacion, normalmente es igual a 96 pixeles por pulgada y
sabes que una pulgada es igual a 2.54 cm, luego tienes que tener en
cuenta tambien la resolucion horizontal y vertical de tu impresora por
ejemplo 300 ppp, entonces halla la ecuacion matematica
y tendras la respuesta.

Pero no acabo de entender. Creo un panel contenedor con la medida correspondiente en pantalla a los MM deseados. Ahora bien como pasar a la impresora todo lo diseñado. Ya se capturar la resolución de la impresora. Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Supongo que usando el objeto TPrinter deberías ir plasmando en la impresora lo que fuiste diseñando.

Aquí en el for existen numerosos ejemplos. Te sugiero que comiences practicando con textos y luego puedes pasar a la parte de gráficos.



atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Bueno, yo tengo ya tengo realizado un conjunto de clases para crear Reports y ya he pasado por todo eso.
Aquí tienes algunas funciones que te pueden ser de ayuda:

Código:
//constantes con la resolución en puntos por pulgada de la impresora predeterminada
float Xppp = GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
float Yppp = GetDeviceCaps(Printer()->Handle, LOGPIXELSY);

//convierte puntos a milímetros en resolución horizontal
float TReport::P2MM_hor (float points)
{
  return (points / Xppp) * 25.4;
}

//convierte puntos a milímetros en resolución vertical
float TReport::P2MM_ver (float points)
{
  return (points / Yppp) * 25.4;
}

//convierte milímetros a puntos en resolución horizontal
float TReportRender::MM2P_hor (float mms)
{
  return (mms / 25.4) * Xppp * Factor;
}

//convierte milímetros a puntos en resolución vertical
float TReportRender::MM2P_ver (float mms)
{
  return (mms / 25.4) * Yppp * Factor;
}


El valor de 25.4 son los milímetros que hay en una pulgada. Para saber las dimensiones del TImage en el que vas a hacer la vista preliminar, sería:

Código:
P2MM_hor(Printer()->PageWidth); //ancho del TImage
P2MM_ver(Printer()->PageHeight); //alto del TImage


Como curiosidad, decirte que yo me he currado bastante el tema: en vez de imprimir directamente en la impresora/pantalla, lo que hago es guardar en un fichero binario con extensión .RPT una serie de comandos inventados por mí, que representan lo que quiero imprimir. Es algo así como un fichero PDF o RTF. Para que te hagas un idea, hay comandos para posicionar el cursor, cambiar la fuente, imprimir un texto alineado, dibujar círculos y líneas, etc...

De esta forma, si por ejemplo tengo que imprimir un listado grande de registros de una base de datos, no tengo que recorrer dos veces el conjunto de registros (una para la vista preliminar y otra para la impresión real) sino que ese fichero que he creado, lo abro y voy imprimiendo en la impresora/pantalla según los comandos del fichero. Esto también me permite escalar (hacer zoom) de la vista preliminar sin apenas pérdida de calidad o imprimir una determinada hoja de todo el listado sin tener que imprimir las hojas previas.

Luego, ese fichero puedo guardarlo en una base de datos, en un diskette o enviarlo por e-mail para recuperarlo más tarde e imprimirlo. En fin, es un sistema bastante currado que no me importaría compartirlo, pero que aunque está documentado, igual lo que hago es liarte más aún.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Inmteresado en todo!!!! Responder citando

Gracias muchas gracias jaquemate por tu respuesta, es aire fresco a estas horas de la mañana!!! Mi problema actual superados algunos escollos es el siguiente: utilizo Quickreport para imprimir porque me parecio lo más facil.
Pongo una medida de papel de impresión, pongo los margenes a 0 , imprimo y ZAS!! el margen inferior lo conserva siempre!!!! por lo tanto no puedo imprimir correctemante. Estoy mirando si es el area de impressión de la misma impressora etc.... pero de momento voy perdido.

Claro que me interesa aprender a imprimir correctamente. De echo si tus funciones permiten definir en cualquier impresora un tamaño de papel de 89mmx105mm e imprimir en el texto y fotos, eres mi salvación!!!! Very Happy

Gracias!!!! Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.