Page 1 of 1

Columnas en Tprinter

Posted: Tue Sep 01, 2009 6:33 pm
by Pedro
Hola a todos
¿Hay alguna forma de saber qué posición ocuparía una columna de impresión (de aquellas que hacíamos en clipper) en la clase tprinter?
A modo de ejemplo si en clipper poníamos @ Prow() 15,40 me gustaría saber si de alguna manera se puede calcular que la columna 40 serían 10.5 cms, (claro está que hay que tener en cuenta el tipo de letra)
¿Hay alguna forma?

Re: Columnas en Tprinter

Posted: Tue Sep 01, 2009 6:46 pm
by ADBLANCO
Yo me 'fabrique' una función para continuar trabajando en 'lineas' y Centímetros
lo único que tiene es que los fonts estan predeterminados y el objeto oPrn es privado de la
función que construye la impresión; Pero puede servirte (creo) para hacer lo que necesitas.


Code: Select all

***************************************************************************************
FUNCTION pSay3(nline,ncol,cTexto,nFont,nJust)
 * pSay3(Linea,Col,"texto",nroFont,nroJustificacion)
 * Linea: Coordenadas del Punto (en caracteres)
 * Col: Coordenadas del Punto (en ctm)
 * nroJustificacion: 1=>texto a la Izquierda del punto,2=>Centrada al punto,3=>Derecha del punto
 * NroFont 1 => Arial 10 bold
 * NroFont 2 => Arial 10
 * NroFont 3 => Arial  8 bold
 * NroFont 4 => Arial  8
 * NroFont 5 => Arial  6 bold
 * NroFont 6 => Arial  6
 // Solo para usar con salida()
***************************************************************************************
LOCAL nVert,nHorz,cFont:="oFont"+str(iif(nFont<7 .and. nFont>0,nFont,1),1)
  oPrn:setfont(&cFont )
  IF nFont<3
    nVert:=0.3939 //0.4
    nHorz:=0.26   //0.45
  ELSE
    nVert:=0.3939
    nHorz:=0.13
  ENDIF
  IF PCOUNT()=5
    oPrn:CmSay(nVert*nline+1,nCol,cTexto,&cFont ,,,,iif(nJust<4 .and. nJust>0,nJust,1))
  ELSE
    oPrn:CmSay(nVert*nline+1,nCol,cTexto,&cFont )
  ENDIF
  RETURN nil

 

Re: Columnas en Tprinter

Posted: Tue Sep 01, 2009 9:27 pm
by Pedro
Hola Angel
Gracias por contestar pero creo que no me has entendido, en tu función, tú ya mandas en cms, lo que yo quiero buscar en esa medida.
Si recuerdas, en clipper cuando enviábamos a imprimir, @ Prow()+1 , 09 Say TRANSF(SER->codigo,"999") ese 09 en negritas es una columna, pero no está en cms, y es lo que yo preguntaba. ¿Cómo puedo saber a qué cms corresponde esa columna 09?
Las líneas no me preocupan, la verdad que con una separación de 0.4 cms van de maravilla, pero las columnas se me atragantan demasiado, de ahí que pidiera si alguien ha hecho alguna función o algún cálculo para saber, como decía antes en el ejemplo que puse, que no era otro que la mitad de una impresión de 80 columnas, a la cual sabemos que normalmente corresponden unos 210 mm de ancho aproximadamente.

Re: Columnas en Tprinter

Posted: Tue Sep 01, 2009 9:49 pm
by ADBLANCO
Ok, ya entiendo, pero yo al final abandoné esa idea y convertí todo a cm.
EL problema es que la mayoría de los fonts son proporcionales, entonces se hace casi imposible conseguir que cuadre

Re: Columnas en Tprinter

Posted: Tue Sep 01, 2009 10:20 pm
by Armando
Pedro:

A ver si este código te sirve, al menos para darte la idea.

Esto se hace con TPrinter no con TReport.

En la clase TPrinter hay dos métodos clave:

oPrn:nVertRes() y
oPrn:nHorzRes()

Seguramente ya adivinaste, se trata de los pixeles que hay en forma VERTICAL y HORIZONTAL respectivamente en el objeto Printer o oPrn.

Entonces teniendo estos dos valores y definiendo la cantidad de renglones y columnas que queremos que oPrn tenga _ cuantos pixeles tendrá cada renglón y columna, veamos un ejemplo:

Si queremos que nuestro objeto tenga 66 renglones o filas y 110 columnas bastaría con una simple división:

nCtdPixRen := oPrn:nVertRes() / 66
nCtdPixCol := oPrn:nHorzRes() / 110

Con estos valores si deseas hacer referencia a la fila 5, columna 8 sería algo tan sencillo como esto:

@ SAY (nCtdPixRen * 5),(nCtdPixCol * 8) etc etc

Espero esto sea lo que necesitas.

Saludos

Re: Columnas en Tprinter

Posted: Wed Sep 02, 2009 12:48 pm
by ADBLANCO
El problema con esto último es que la impresión no mantiene siempre el mismo aspecto en todas las impresoras, te va a variar dependiendo de la resolución y forma de imprimir (por ejemplo: Apaisada).

Por eso terminé trabajando en Cm, además es muy facil cuando estás convirtiendo viejos sistemas de clipper, en el cual ya tienes impresiones anteriores, solo tienes que medir y Ya.