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