posible mejora en Tprinter

posible mejora en Tprinter

Postby mastintin » Thu May 23, 2013 7:45 am

Sería bueno añadir este par de metodos a la clase tPrinter , quitaría algo de trabajo .

Code: Select all  Expand view


METHOD CmBox( nRow, nCol, nBottom, nRight, oPen ) CLASS TPrinter
local aTmp := ::CmRect2Pix({ nRow, nCol, nBottom, nRight })
      ::Box( aTmp[1], atmp[2], aTmp[3], aTmp[4], oPen )
Return nil

METHOD CmLine( nRow, nCol, nBottom, nRight, oPen ) CLASS TPrinter
local aTmp := ::CmRect2Pix({ nRow, nCol, nBottom, nRight })
      ::Line( aTmp[1], atmp[2], aTmp[3], aTmp[4], oPen )
Return nil

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby Antonio Linares » Thu May 23, 2013 8:09 am

Manuel,

gracias! Incluido para el próximo build :-)

He modificado tu código asi:

Code: Select all  Expand view

METHOD CmBox( nRow, nCol, nHeight, nWidth, oPen ) CLASS TPrinter

   local aTmp := ::CmRect2Pix( { nRow, nCol, nRow + nHeight - 1, nCol + nWidth - 1 } )
   
return ::Box( aTmp[ 1 ], aTmp[ 2 ], aTmp[ 3 ], aTmp[ 4 ], oPen )
 
METHOD CmLine( nRow, nCol, nHeight, nWidth, oPen ) CLASS TPrinter

   local aTmp := ::CmRect2Pix( { nRow, nCol, nRow + nHeight - 1, nCol + nWidth - 1 } )
   
return ::Line( aTmp[ 1 ], aTmp[ 2 ], aTmp[ 3 ], aTmp[ 4 ], oPen )
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: posible mejora en Tprinter

Postby mastintin » Thu May 23, 2013 8:31 am

Esa implementación me parece muy correcta , pero rompe un poco con el paralelismo con ::box() y ::line() que no usan alto y ancho sino cordenadas "finales" .
Para mi es mas cómoda tu implementacion , pero ... ¿ Como lo ves ?
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby Antonio Linares » Thu May 23, 2013 9:02 am

Manuel,

Tienes razón, es preferible implementarlo de la misma forma usada anteriormemte :-)

gracias!
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: posible mejora en Tprinter

Postby mastintin » Thu May 23, 2013 9:49 am

mas mejora :

Code: Select all  Expand view


METHOD Pix2Cmtr(nRow, nCol) INLINE ;
                   ( nRow := ( nRow * 25.4 / ::nLogPixelX() ) / 10 ,;
                     nCol := ( nCol * 25.4 / ::nLogPixelY() ) /10  ,;
                     {nRow, nCol}                )

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby Antonio Linares » Thu May 23, 2013 9:53 am

Incluido tambien, gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: posible mejora en Tprinter

Postby mastintin » Thu May 23, 2013 10:12 am

Aun mas . Estas devuelven el punto que centra el texto en la página .
La longuitud del texto en cm.
imprime un texto con un box .
imprime un texto con un box centrado en la pagina ( ideal para titulos)
Ya esta completo .

Code: Select all  Expand view



METHOD CmtrGetTextWidth( cText, oFont ) INLINE ( ::GetTextWidth( cText, oFont ) * 25.4 / ::nLogPixelX() ) / 10

METHOD CmtrTextToCenter( cText, oFont ) INLINE  ;
       (( ::nHorzSiZe() / 10   ) /2 ) -  ( ( ::GetTextWidth( cText, oFont ) * 25.4 / ::nLogPixelX() ) / 10) /2

METHOD TextInBoxCentered(nTop,cText,cmExRow,cmExCol,ofont,oPen,nColor ) INLINE  ;
    ::TextInBox( nTop, ::CmtrTextToCenter( cText, oFont ),cText,cmExRow,cmExCol,ofont,oPen,nColor )

METHOD TextInBox(nTop,nLeft,cText,cmExRow,cmExCol,oFont,oPen,nColor ) CLASS TPrinter

local cmTextWidth   := ( ::GetTextWidth( cText, oFont ) * 25.4 / ::nLogPixelX() ) / 10
local cmTextHeight  := ( ::GetTextHeight( cText, oFont ) * 25.4 / ::nLogPixelY() ) / 10

       ::cmBox( nTop - cmExRow  , ;
                 nLeft - cmExCol ,;
                 nTop + cmTextWidth  + cmExRow , ;
                 nLeft+ cmTextHeight + cmExCol , ;
                 oPen )

      ::cmsay( nTop,nLeft,cText,oFont,,nColor )

RETURN nil


 
Last edited by mastintin on Thu May 30, 2013 8:01 pm, edited 1 time in total.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby davidObarrio » Thu May 30, 2013 2:50 pm

Estimado....

que bueno estas nuevas mejoras.... podrías publica como te queda la clase arregada ?

gracias totales

david
davidObarrio
 
Posts: 72
Joined: Tue Oct 02, 2012 4:36 pm

Re: posible mejora en Tprinter

Postby sysctrl2 » Thu May 30, 2013 3:15 pm

En síntesis , si todo esto va de la mano con un TestPrn.Prg, es mas significativo.
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1020
Joined: Mon Feb 05, 2007 7:15 pm

Re: posible mejora en Tprinter

Postby mastintin » Thu May 30, 2013 4:33 pm

davidObarrio wrote:Estimado....

que bueno estas nuevas mejoras.... podrías publica como te queda la clase arregada ?

gracias totales

david

Siento no poder enviar la clase tprinter pertenece a Fivetech y esta bajo licencia , por ello he publicar los trozos de código variados pero no la clase completa.

sysctrl2 wrote:En síntesis , si todo esto va de la mano con un TestPrn.Prg, es mas significativo.
saludos.

Intentaré hacer un ejemplo sencillo entre hoy y mañana , aunque ahora mismo estoy algo liado , si mañana no publico el sample la cosa tendra que esperar a que vuelva pues salgo el sabado de viaje para toda la semana . Para la vuelta prometido que tienes algo .
Saludos.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby mastintin » Thu May 30, 2013 4:56 pm

Aqui dejo un testprint7.prg rapido .No lo he testeado pues no estoy en windows pero tiene que funcionar si añadimos los metodos anteriores.

Code: Select all  Expand view


#include "FiveWin.ch"
 function Main()
    local oPrn, cText
    local  oFont
    local cmLeft
    local cmTexto
 
 
   PRINTER oPrn PREVIEW

      DEFINE FONT oFont NAME "Courier New" SIZE 0, -10 OF oPrn
      DEFINE PEN  oPen1  STYLE PS_SOLID WIDTH 2 OF oPrn
     
      PAGE

        oPrn:TextInBox( 10,5,"Texto dentro de box",0.2,0.2,oFont,oPen1 )
        oPrn:TextInBoxCentered(8,"Texto Centrado en pagina dentro de box",0.2,0.2,ofont,oPen1 )

         cmLeft:= oPrn:CmtrTextToCenter( "Texto que debemos centrar", oFont )
        oPrn:cmSay(12,cmLeft,"Texto que debemos centrar",oFont )

        cmText:= oPrn:CmtrGetTextWidth( "Texto del que queremos saber su longuitud en centimetros", oFont )

        oPrn:cmSay(14,5,"El texto anterior mide "+AllTrim(Str(cmtext))+ " cm.",oFont )
                       
      ENDPAGE          
     
   ENDPRINTER
   
 
   oFont:End()

return

 
Last edited by mastintin on Thu May 30, 2013 9:00 pm, edited 1 time in total.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby Antonio Linares » Thu May 30, 2013 5:21 pm

Manuel,

Añadido para FWH 13.05, gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: posible mejora en Tprinter

Postby mastintin » Thu May 30, 2013 8:26 pm

Antonio , En el código existe un gazapo en el metodo TextInBox ( cambiado alto * ancho )
La forma correcta es esta :
Code: Select all  Expand view


METHOD TextInBox(nTop,nLeft,cText,cmExRow,cmExCol,oFont,oPen,nColor ) CLASS TPrinter

local cmTextWidth   := ( ::GetTextWidth( cText, oFont ) * 25.4 / ::nLogPixelX() ) / 10
local cmTextHeight  := ( ::GetTextHeight( cText, oFont ) * 25.4 / ::nLogPixelY() ) / 10

       ::cmBox( nTop - cmExRow  , ;
                 nLeft - cmExCol ,;
                 nTop + cmTextHeight  + cmExRow , ;
                 nLeft+cmTextWidth  + cmExCol , ;
                 oPen )

      ::cmsay( nTop,nLeft,cText,oFont,,nColor )

RETURN nil


 


el testprint7 revisado :

Code: Select all  Expand view


#include "FiveWin.ch"
 function Main()
    local oPrn, cText
    local  oFont
    local cmLeft
    local cmTexto
 
 
   PRINTER oPrn PREVIEW

      DEFINE FONT oFont NAME "Courier New" SIZE 0, -10 OF oPrn
      DEFINE PEN  oPen1  STYLE PS_SOLID WIDTH 2 OF oPrn
     
      PAGE

        oPrn:TextInBox( 10,5,"Texto dentro de box",0.2,0.2,oFont,oPen1 )
        oPrn:TextInBoxCentered(8,"Texto Centrado en pagina dentro de box",0.2,0.2,ofont,oPen1 )

         cmLeft:= oPrn:CmtrTextToCenter( "Texto que debemos centrar", oFont )
        oPrn:cmSay(12,cmLeft,"Texto que debemos centrar",oFont )

        cmText:= oPrn:CmtrGetTextWidth( "Texto del que queremos saber su longuitud en centimetros", oFont )

        oPrn:cmSay(14,5,"El texto anterior mide "+AllTrim(Str(cmtext))+ " cm.",oFont )
                       
      ENDPAGE          
     
   ENDPRINTER
   
 
   oFont:End()

return


 


el resultado del test :
Image
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: posible mejora en Tprinter

Postby Biel EA6DD » Fri May 31, 2013 6:54 am

Buen trabajo, gracias por tu tiempo y esfuerzo en mejorar las clases, y por compartir ese trabajo.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 46 guests