 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 21 Jun, 2004 12:04 pm Asunto: Diseño de informe vista |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mar 22 Jun, 2004 3:15 am Asunto: |
|
|
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 |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mar 22 Jun, 2004 10:36 pm Asunto: |
|
|
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 |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Mie 23 Jun, 2004 8:25 am Asunto: Inmteresado en todo!!!! |
|
|
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!!!!
Gracias!!!!  |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|