Club Delphi  
    Paypal   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 29-06-2013
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Raro resultado al convertir mm a pixels para usar con QuickRepor

Hola a todos,

Tengo una duda acerca de la equivalencia de MM a Pixels con QuickReport.

Para ponerlo en contexto, empiezo diciendo que mi problema básico era poner sobre un panel TLabels que luego deberían convertirse a TQRLabel y ponerlos sobre una banda de quickreport.

Para ello necesito que el panel tenga en pixels el mismo ancho que la banda de QuickReport.

La idea es simple a partir de que mis QuickReports manejan tamaños de hojas de papel en mm, y los bordes también. así que el ancho de banda en mm es el ancho del papel menos el margen izquierdo y menos el margen derecho.

Por tanto, el ancho del panel debería ser simplemente pasar ese ancho en mm a pixels.

Para esto último uso lo siguiente

Código Delphi [-]
Var 
    AnXScale: Double:
    HRes,HSiz: Integer;
 
Begin
       // otras líneas       
       
     HRes := GetDeviceCaps(AHandle,HORZRES);  
     HSiz := GetDeviceCaps(AHandle,HORZSIZE); 
     // Factor de escala
     AnXScale := HRes;
     AnXScale := AnXScale / HSiz;

Sin embargo, cuando se ejecuta el programa, el factor de Escala AnXScale, para mi monitor y configuración de pantalla, da 3.63 mientras que el que QuickReport está aplicando es de 3.77, una diferencia demasiado grande para justificarla con errores de redondeo.

Akguien sabe que puede estar pasando ?. Me falta algo en el cálculo ?

Agradezco cualquier comentario
Responder Con Cita
  #2  
Antiguo 29-06-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Que yo sepa, un pixel llevado a "la vida real" no tiene un tamaño fijo, y es distinto entre diferentes monitores.
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
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
  #4  
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.671
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
  #5  
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
  #6  
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
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
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 01:10:20.


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