Ayuda con clase TPrinter

Ayuda con clase TPrinter

Postby TOTOVIOTTI » Fri Mar 06, 2015 9:58 pm

Hola amigos,
hace rato venía usando una modificación de el método say de la clase tprinter para que
me justifique a ambos lados, con un par de agregados, y la ayuda de alguien que lo dejó
en el foro:
previamente al inicio del programa se define
#define PAD_BOTH 3

METHOD Say( nRow, nCol, cText, oFont, nWidth, nClrText, nBkMode, nPad, lO2A ) ;
CLASS TPrinter

local nTemp
Local aRect, cC, nI, nP,vec

if ::hDC = 0
return nil
endif

DEFAULT oFont := ::oFont,;
nBkMode := 1 ,;
nWidth := 0 ,;
nPad := ::nPad ,;
lO2A := .F.

IF nWidth > 0 .AND. oFont != Nil // AAL 20/05/2002

vec:=::Cmtr2Pix(nRow,nWidth)
cText:=Alltrim(cText)
DO WHILE ::GetTextWidth( cText, oFont ) > vec[2] //nWidth
IF nPad=1
cText:=Substr(cText,2,Len(cText))
ELSE
cText:=Substr(cText,1,Len(cText)-1)
ENDIF
ENDDO
IF nPad=PAD_BOTH .AND. " "$cText // Justificado a ambos lados
nP:=1
DO WHILE ::GetTextWidth( cText, oFont ) < vec[2] //nWidth
FOR nI=nP TO Len(cText)
nP++
cC:=SubStr(cText,nI,1)
IF cC=" "
cText:=Substr(cText,1,nI)+Substr(cText,nI,Len(cText))
nI:=Len(cText)+1
nP++
ENDIF
NEXT nI
IF nP>=Len(cText)-1
nP:=1
ENDIF
ENDDO
ENDIF
ENDIF

if oFont != nil
oFont:Activate( ::hDCOut )
endif

SetbkMode( ::hDCOut, nBkMode ) // 1,2 transparent or Opaque

if nClrText != nil
SetTextColor( ::hDCOut, nClrText )
endif

Do Case
Case nPad == PAD_LEFT
Case nPad == PAD_RIGHT
nCol := Max( 0, nCol - ::GetTextWidth( cText, oFont ) )
Case nPad == PAD_CENTER
nCol := Max( 0, nCol - ( ::GetTextWidth( cText, oFont ) / 2 ) )
EndCase

If ::oFile # Nil
::oFile:Say( ::nFRow, ::nFCol, cText )
If ::nOldRow == Nil
::nOldRow := nRow
::nOldCol := nCol
Else
If ::nOldRow < nRow
::nFRow ++
::nFCol := 0
::nOldRow := nRow
Else
::nFCol += Len( cText ) + 2
Endif
Endif
Endif

TextOut( ::hDCOut, nRow, nCol, If( lO2A, OemToAnsi( cText ), cText ) )

if oFont != nil
oFont:DeActivate( ::hDCOut )
endif

return nil

La cosa es, que hoy estuve todo el día intentando hacer funcionar ésto en las versiones más nuevas de
la clase tprinter y me fue imposible, alguien tiene idea como modificarla para que funcione?
Muchas gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby TOTOVIOTTI » Sun Mar 08, 2015 12:28 am

Una aiudita..... porfi....
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter (Centrado de texto)

Postby TOTOVIOTTI » Mon Mar 09, 2015 1:42 pm

Amigos,
a alguien le toca imprimir texto centrado en un listado?
Saludos
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby karinha » Mon Mar 09, 2015 2:25 pm

Code: Select all  Expand view  RUN

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con clase TPrinter

Postby TOTOVIOTTI » Mon Mar 09, 2015 2:35 pm

Karinha
gracias pero de lo que hablo, es de justificar el texto a ambos lados, para que
quede alineado a ambos márgenes, esto es para poner el texto a la derecha, o izquierda o centrado,
yo necesito que esté JUSTIFICADO porque se trata de formularios oficiales que deben
presentar este formato.
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby karinha » Mon Mar 09, 2015 2:39 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con clase TPrinter

Postby TOTOVIOTTI » Mon Mar 09, 2015 2:51 pm

Bueno, justamente lo que estoy usando hasta ahora,
es la función Imp_memow() que la vengo aplicando desde hace rato, tenía modificada
la clase tprinter de la versión 6.12 y algo y estaba usando esa, pero,
como actualizé la versión de FW, quería aprovechar las mejoras de la clase
tprinter y preview, entonces necesitaba corregirla porque así como está
no me funciona correctamente, si miras el primer post, ahí está
el método Say de la clase tprinter que es donde hay que modificar, pero no
lo puedo hacer funcionar.
Saludos
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby karinha » Mon Mar 09, 2015 3:03 pm

/*
Entrada = Texto a ser justificado

Tamanho em que o texto será justificado

Fonte utilizada

Indicador se o tamanho foi passado em pixels

Saída = Texto espaçado/justificado
*/

Code: Select all  Expand view  RUN

METHOD JustifyText( cText, nLen, oFont, lPixel ) CLASS TPrinter

   local cAuxi:=ALLTRIM(cText), nLenPixel:=0, nSpace:=1

   local aWords:={}, i:=0, cSubst:="", cSpell:="", lDone:=.T.

   for i = 1 to len(cText)

      cSubst :=  SUBST(cText,i,1)

      if cSubst = " "

         aadd(aWords,cSpell)

         cSpell = ""

      endif

      cSpell +=  cSubst

   next

   if .not.empty(cSpell)

      aadd(aWords,cSpell)

   endif

   if len(aWords)=0 .OR. len(aWords)=1

      return cText

   endif

   if lPixel = nil .or. .not.lPixel

      nLenPixel = Max( 0, ( nLen * 10 * ::nHorzRes() / ::nHorzSize() ) - ::nXoffset )

   else

      nLenPixel = nLen

   endif

   while .T.

      cAuxi = ""

      lDone = .F.

      for i = 1 to len(aWords)

         IF i # len(aWords)

            cAuxi += aWords[ i ] + SPACE(nSpace)

         ENDIF

      next

      IF ::GetTextWidth( cAuxi, oFont ) >= nLenPixel

         lDone = .T.

         EXIT

      ENDIF

      nSpace ++

   enddo

   IF lDone

      cText = cAuxi

   ENDIF

return cText

 


// Exemplo de utilização:
// Ejemplo de como usar

Code: Select all  Expand view  RUN

   DEFINE FONT oFT12N NAME "Arial" SIZE 0,-11 OF oPrn

   cFrase = "Quinto Encontro de FiveWiners em Novembro/2007, espero ver todos presentes !"

   nLen = 19 \\ largura do A4 com margens

   cJustificado = oPrn:JustifyText(cFrase,nLen,oFT12N)

oPrn:CmSay(01,01,cJustificado,oFT12N,NIL,CLR_BLACK)
 


Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con clase TPrinter

Postby TOTOVIOTTI » Tue Mar 10, 2015 12:58 pm

PERFECTO!
Esto es lo que necesito, una consultita más:
Para imprimir un texto de varias líneas como tendría que hacer?

Gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby karinha » Tue Mar 10, 2015 1:03 pm

Mira \samples\testprn?.prg creo tenga el que necesitas.

saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con clase TPrinter

Postby TOTOVIOTTI » Fri Mar 13, 2015 10:53 pm

Karinha... no encuentro ese método dentro de la tprinter, tampoco ejemplos de los testprn... no sé de donde se puede probar...
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 421
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Ayuda con clase TPrinter

Postby cnavarro » Fri Mar 13, 2015 11:41 pm

Mira el metodo SayMemo de la clase Scintilla
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 45 guests