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 30-06-2013
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Por eso es el cálculo

Hola Casimiro,

Muchas gracias por comentar.

Si, claro, el pixel varía entre monitores; por eso es el cálculo que hago de determinar a que equivale el pixel en mi monitor en particular.

Para ser consistente, comparo contra el cálculo que hace QuickReport en mi mismo monitor; ya que, por lo expuesto, si usaramos otro monitor se sería lógico que nos diera diferente.

El caso es que están dando diferente con el "mismo monitor". Yo pensaría que QuickReport, al hacer la conversión, debería seguir básicamente mi mismo proceso; pero, no lo hace. La pregunta es : Por qué ?
Responder Con Cita
  #2  
Antiguo 30-06-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.702
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por rolandoj Ver Mensaje
Yo pensaría que QuickReport, al hacer la conversión, debería seguir básicamente mi mismo proceso; pero, no lo hace. La pregunta es : Por qué ?
Ese es el problema, "tú pensarías que quickreport hace el mismo proceso", pero lo que tú pienses puede ser distinto de lo que hace quickreport
Deberías saber cómo lo hace quickreport, ¿no tienes acceso al código fuente o en algún lugar de la documentación?
Es que estarás "dando palos de ciego" mientras no te asegures de ese tema.
Responder Con Cita
  #3  
Antiguo 30-06-2013
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Ese es el problema

Hola Casimiro,

Si, ese es el problema. Por eso pregunto aquí.

Es que la lógica indica que para tener una vista preliminar en pantalla, como lo hace QuickReport, las posiciones y tamaños de los campos en mm deben ser las que efectivamente se van a imprimir; pero, en pantalla se despliega en Pixels (y las medidas de los componentes QuickReport están en pixels), luego deben convertirse los mm a pixels.

Como hacerlo es el problema. El método que empleo es lo lógico; pero, como dije antes, la evidencia indica que no es el mismo que usa Quick Report. La gran pregunta es por qué ? (bueno, y por supuesto, que método usa '). En este momento ni siquiera se me ocurre una razón para usar un método distinto.
Responder Con Cita
  #4  
Antiguo 01-07-2013
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Todos los generadores de informes que conozco, trabajan en twips ( 1 pulgada tiene 1440 twips si no recuerdo mal), ya que es una medida independiente del dispositivo (papel, impresora, pantalla, escaner). Para colmo de males, se tiene en cuenta la propiedad del Form PixelPerInch (varía al usar fuentes grandes o normales en windows).

Cuando trabajé con Reportman (la versión OpenSource), usé estas conversiones:
Código:
                   1440 twips                          2.54 cms
twips_per_Inch  = ------------        cms_per_Inch =  ---------
                   1 Inch                               1  Inch

                    72  pixels
pixels_per_inch = -----------
                     1 inch
-----------------------------------------------------------------------------}
Estas rutinas están hechas por mí (editado, porque me equivoqué antes):
Código Delphi [-]
const
 CMS_PER_INCHESS=2.54;
 TWIPS_PER_INCHESS=1440;
 POINTS_PER_INCHESS=72;


function PixelsToTwips(apixels:integer):integer;
begin
  Result:=Round((APixels/(Screen.PixelsPerInch))* TWIPS_PER_INCHESS);
end;

function TwipsToPixels(atwips:integer):integer;
begin
  Result:=Round((atwips *Screen.PixelsPerInch) / TWIPS_PER_INCHESS);
end;

Estas otras, son de ReportMan (Open Source):
Código Delphi [-]
type 
TRpTwips=integer;
function twipstoinchess(twips1:TRpTwips):double;
begin
 Result:=twips1/TWIPS_PER_INCHESS;
end;

function twipstocms(twips1:TRpTwips):double;
begin
 Result:=(twips1/TWIPS_PER_INCHESS)*CMS_PER_INCHESS;
end;
Te recomiendo (por el bien de tu salud mental ) uses siempre una sola unidad, todo en twips, y, si tienes que mostrar algo al usuario, entonces haces al conversión a pixels o pulgosos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-07-2013 a las 17:22:04. Razón: corregir erratas
Responder Con Cita
  #5  
Antiguo 01-07-2013
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Gracias por el dato

Hola Lepe,

Muchas gracias por el dato.

Toca analizar esto con calma; empezando porque yo nunca he trabajado en pulgadas.

Por otra parte, no entiendo la necesidad de pasar la escala a trabajar con pulgadas; en últimas las pulgadas son covertibles a mm y lo máximo que debería haber de diferencia son errores de redondeo.

Entiendo que los generadores trabajen internamente así porque pulgadas sea la unidad de medida de sus países; pero, por eso no debería haber diferencias

Lo que más me causa curiosidad es que ese método que muestras parece operar ignorando que, en general, la resolución horizontal de pantalla es distinta a la resolución vertical; como es indicado por la función GetDeviceCaps que yo estoy usando.

Puede que tengas razón en lo de cuidar la salud mental; pero, no me gusta hacer cosas sin entender la razón de las mismas. Para mi el aspecto conceptual es importante más allá de que operativamente las cosas funcionen.
Responder Con Cita
  #6  
Antiguo 02-07-2013
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 20
anubis Va por buen camino
Bueno si me lo permitis, he visto el mismo problema con los informes de fortesreport en lazarus.
Como sabeis para crear un report lo tienes que añadir a un form (por lo menos lo hago asi) y luego le voy poniendo los campos.

Bueno, segun la hoja que le puse 1 cm de margen, coloco el label a un cm y ahi me marca 40 pixels.

Por el otro lado, tenia algun report ya creado e impreso, y compare las medidas, mas o menos se ajustan a 40 pixeles, en algunos casos, 3.6, nose si se ajusta a la realidad.

De todas formas probare el metodo que comentais .
Responder Con Cita
  #7  
Antiguo 02-07-2013
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Gracias por el aporte

Hola Anubis,

Muchas gracias por el aporte.

Con eso, el asunto me intriga más.

Ojalá algún colega pueda traer una explicación. Tiene que existir alguna razón en el fondo de este asunto; pero, no deja de ser muy raro.

Milímetros y pulgadas son medidas exactas independientemente de si estamos en un monito o sobre un papel. El pixel si cambia segùn el monitor y la resolución que tenga; pero, como las anteriores son exactas, el mètodo para convertir de una resolución específica de un monitor específico a ellas debería ser el mismo; y hasta donde sé debería usar el GetDeviceCaps de Windows que se supone que se implementó para soportar ese tema.

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
convertir resultado FormatFloat camiz Varios 3 02-04-2013 17:03:51
Error Raro al Usar IBX's sobre Firebird 2.0 AGAG4 Firebird e Interbase 17 01-10-2008 20:29:39
convertir a pixels avmm2004 Gráficos 2 13-02-2008 16:02:34
¿Pixels no son pixels en todas las configuraciones? elcigarra Gráficos 0 27-01-2006 14:38:05
convertir de 'TCaption' para usar su valor en 'PAnsiChar' jbgpina OOP 5 03-03-2004 14:06:45


La franja horaria es GMT +2. Ahora son las 08:33:36.


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