by noe aburto » Mon Sep 09, 2013 11:08 pm
Que tal, ojala te sirva, yo lo uso para imprimir textos justificados, tipo DOS.
cDesc:='***('+upper(DescNum(abs(tot_car)))+')***, CANTIDAD ABONADA A NUESTRA'+;
' CUENTA NO. '+alltrim(ban->num_cta)+' DE '+alltrim(ban->nom_ban)+;
' SEGUN COPIA DE FICHA DE DEPOSITO DEL DIA '+ceros(day(dFecPag),2)+' DE '+MesLetra(dFecPag)+' DEL '+str(year(dFecPag),4)+;
' Y QUE APLICAMOS A LO SIGUIENTE:'
inicia impresion con fuente tipo texto
aTexto:=ParteMemo(cDesc,55) // ABAJO LA FUNCION
for i:=1 to len(aTexto)
if substr(aTexto[i],len(aTexto[i]),1)==chr(20)
@ nSup+i,nIzq+05 dato substr(aTexto[i],1,len(aTexto[i])-1) en oReci
else
@ nSup+i,nIzq+05 dato Justifica(aTexto[i],55,i%3) en oReci // ABAJO LA FUNCION
endif
next
termina pagina
termina impresion
// --- Parte memo
function ParteMemo(mTex,nLong)
local aTex:={},cTex,i,nPrinc,nUltEsp
cTex:=memotran(mTex,chr(20),chr(29))
nPrinc:=nUltEsp:=1
for i:=1 to len(cTex)
while substr(cTex,i,1)==chr(29)
cTex:=stuff(cTex,i,1,'')
if i>len(cTex)
exit
endif
end
if i>len(cTex)
exit
endif
if substr(cTex,i,1)==chr(20)
aadd(aTex,substr(cTex,nPrinc,i-nPrinc+1))
nPrinc:=nUltEsp:=i+1
loop
endif
if substr(cTex,i,1)==' '
nUltEsp:=i
endif
if i-nPrinc+1>nLong
do case
case nUltEsp==nPrinc
aadd(aTex,substr(cTex,nPrinc,nLong))
nPrinc:=nUltEsp:=i
case nUltEsp==i
aadd(aTex,substr(cTex,nPrinc,nLong))
nPrinc:=nUltEsp:=i+1
otherwise
aadd(aTex,substr(cTex,nPrinc,nUltEsp-nPrinc))
nPrinc:=nUltEsp:=nUltEsp+1
endcase
endif
next
if len(trim(substr(cTex,nPrinc)))<>0
aadd(aTex,substr(cTex,nPrinc))
endif
if substr(aTex[len(aTex)],len(aTex[len(aTex)]),1)<>chr(20)
aTex[len(aTex)]+=chr(20)
endif
return aTex
// --- Justifica un texto
function Justifica(cTex,nLong,nDonde)
local aEspacio:={},i,j,nFaltante,lEspacio
default nDonde:=1
cTex:=trim(cTex)
if len(cTex)>=nLong
return substr(cTex,1,nLong)
endif
nFaltante:=nLong-len(cTex)
lEspacio:=.f.
for i:=1 to len(cTex)
if substr(cTex,i,1)==' '
if lEspacio;aadd(aEspacio,i);endif
lEspacio:=.f.
else
lEspacio:=.t.
endif
next
if len(aEspacio)==0
return padr(cTex,nLong,'-')
endif
do case
case nDonde==0;j:=len(aEspacio)
case nDonde==1;j:=min(len(aEspacio),nFaltante)
otherwise; j:=min(int((len(aEspacio)+nFaltante)/2),len(aEspacio))
endcase
for i:=1 to min(len(aEspacio),nFaltante)
cTex:=substr(cTex,1,aEspacio[j])+substr(cTex,aEspacio[j])
j--
next
cTex:=Justifica(cTex,nLong)
return cTex