Ayuda con clase TPrinter
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Ayuda con clase TPrinter
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
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
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Re: Ayuda con clase TPrinter (Centrado de texto)
Amigos,
a alguien le toca imprimir texto centrado en un listado?
Saludos
Roberto
a alguien le toca imprimir texto centrado en un listado?
Saludos
Roberto
- karinha
- Posts: 7932
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Ayuda con clase TPrinter
Code: Select all | Expand
#Define PAD_LEFT 0
#Define PAD_RIGHT 1
#Define PAD_CENTER 2
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Re: Ayuda con clase TPrinter
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
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
- karinha
- Posts: 7932
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Ayuda con clase TPrinter
Podrias poner un ejemplo simples?
Mira:
http://fivetechsupport.com/forums/viewtopic.php?f=6&t=27192&start=0
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=14387
http://wiki.fivetechsoft.com/doku.php?id=fivewin_functions_by_category
saludos.
Mira:
http://fivetechsupport.com/forums/viewtopic.php?f=6&t=27192&start=0
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=14387
http://wiki.fivetechsoft.com/doku.php?id=fivewin_functions_by_category
saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Re: Ayuda con clase TPrinter
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
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
- karinha
- Posts: 7932
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Ayuda con clase TPrinter
/*
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
*/
// Exemplo de utilização:
// Ejemplo de como usar
Saludos.
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
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
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
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Re: Ayuda con clase TPrinter
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
Esto es lo que necesito, una consultita más:
Para imprimir un texto de varias líneas como tendría que hacer?
Gracias!
Roberto
- karinha
- Posts: 7932
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Ayuda con clase TPrinter
Mira \samples\testprn?.prg creo tenga el que necesitas.
saludos.
saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- TOTOVIOTTI
- Posts: 430
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
- Has thanked: 5 times
Re: Ayuda con clase TPrinter
Karinha... no encuentro ese método dentro de la tprinter, tampoco ejemplos de los testprn... no sé de donde se puede probar...
Re: Ayuda con clase TPrinter
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
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