Saludos.
Tengo la necesidad de justificar textos al estilo de Office Word.
Con impresiones de DOS no tego ningun problema, de hecho diseñe mis funciones y funcionan perfecto, pero con impresiones de CmSay o Say no se como resolverlo ya que se manejan en puntos.
Alquien que me pueda hechar una manita con esto.
Gracias.
Fwh 8.11, xH 9.1, bcc 5.1
Justificar un texto con impresion grafica
- noe aburto
- Posts: 420
- Joined: Wed Nov 26, 2008 6:33 pm
- Location: Morelia, Mich. Mexico.
Justificar un texto con impresion grafica
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
Re: Justificar un texto con impresion grafica
Aunque esto es parte de algo más complejo, te puede servir para que desarrolles tu propia función para imprimir justificado una cadena de texto;
espero te ayude..
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
******************************************************************************************
FUNCTION Imp_MemoW(cTxt,nline,nLpos,nWid,nFont,nSkp,lJust) // IMPRIME CAMPO MEMO
******************************************************************************************
// cTxt - dato tipo memo, en relidad basta con que sea texto
// nLpos - posicion en cm del inicio del texto en la linea
// oPrn - objeto TPrinter
// nWid - ancho mAximo de texTo (en cmt)
// oFont - fuente (Numero Salida)
// nSkp - salto o espaciado por renglon
// lJust - (Opcional) si no va a justificar => .f.
// Nota solo para usar con salida()
LOCAL cLin, lCont:=.T., nP:=0, lNext, cC, nW,cFont,cPatron,nIp,nlcT,nCol := 1,nRow := 1
DEFAULT nSkp := 01.0
DEFAULT nWid := 19.0
DEFAULT nFont:= 01.0
DEFAULT nLpos:= 01.6
DEFAULT lJust:= .T.
oPrn:Cmtr2Pix(0,@nWid)
cTxt := Alltrim(cTxt)
nW := nWid-0.2
cFont := "oFont"+STR(IIF(nFont<7 .and. nFont>0,nFont,1),1)
line := nline
DO WHILE lCont // un desmadre para separar
cLin := cC := "" // y justificar los memos!!
lNext := .T.
DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid .AND. nP<=Len(cTxt) .AND. lNext
nP++
cC:=Substr(cTxt,nP,1)
IF ASC(cC)<>13
cLin+=cC
ELSE
nP++
lNext := .F.
ENDIF
ENDDO
IF ASC(cC)<>13 .AND. ASC(cC)<>0
CPATRON := CLIN
cC := Substr(cTxt,nP+1,1)
IF " "$cLin .AND. cC<>" "
ELSE
// palabra cortada, retrocede
nIp := 1
nlct := len(clin)
DO WHILE Substr(cLin,nlct-nIp,1)<>" " .and. nIP<nlct
nIp++
ENDDO
IF nIp>0
cLin := SubStr(cLin,1,nlct-nIp-1)
nP -=nIp
ENDIF
ENDIF
DO WHILE cC<>" " .AND. Len(cLin)>0
cLin := Substr(cLin,1,Len(cLin)-1)
cC := Right(cLin,1)
nP--
ENDDO
nlct := len(clin)
IF lJust
IF AT(" ",CLIN)>0 .AND. AT(" ",CLIN)<NLCT .AND. AT(" ",CLIN)<>1 // SOLO SI TIENE MAS DE UNA PALABRA
DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid // JUSTIFICADO
nIp := 1
DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid .and. nIP<nlct
nIP++
DO WHILE Substr(cLin,nlct-nIp,1)<>" " .and. nIP<nlct
nIp++
ENDDO
IF Substr(cLin,nlct-nIp,1)=" "
cLin := Substr(cLin,1,nlct-nIp-1)+" "+SubStr(cLin,nlct-nIp,len(clin))
nIp++
ENDIF
ENDDO
ENDDO // FIN DEL JUSTIFICADO
ENDIF
ENDIF
pagina(1)
nline:=line
PSAY3(line,nLpos,cLin,nFont)
nline += nSkp
line := nline
ELSE
pagina(1)
nline:=line
PSAY3(line,nLpos,cLin,nFont)
nline += nSkp
line := nline
ENDIF
IF nP >= Len(cTxt)
lCont := .F.
ENDIF
ENDDO
RETURN nline
Saludos
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
-
- Posts: 330
- Joined: Fri May 25, 2007 9:06 pm
Re: Justificar un texto con impresion grafica
USA LA CLASE TIMPRIME DE FULLL..... ES LO UNICO Q HE ENCONTRADO QUE SOLUCIONA EL PROBLEMA DE JUSTIFICAR LOS TEXTO, NUMEROS,,, ES SUPER SIMPLE DE APLICAR::
ADEMAS HEREDA TODO DE LA CLASE NATIVA DE FWH...
SI TIENES PROBLEMAS PARA USARLA ME HECHAS UN GRITITO...
ATTE. UN COLEGA
ADEMAS HEREDA TODO DE LA CLASE NATIVA DE FWH...
SI TIENES PROBLEMAS PARA USARLA ME HECHAS UN GRITITO...
ATTE. UN COLEGA