FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pregunta sobre CmSay
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 11:10 AM

Buenos días a los componentes del foro

Necesito imprimir un registro de muchos caracteres (120). ¿Hay algun método que realice la justificación de la línea y pase a la siguiente línea?.

Otra cosa. ¿Se puede imprimir un campo numérico con un formato 99.999,99?

Muchas gracias.

Saludos. Fernando
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Re: Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 11:46 AM

Compañero:

1º pregunta: Lo desconozco. Pero supongo que utilizando las funciones SUBSTR y AT para buscar espacios en blanco por donde "cortar", se podrá construir un metodo "casero" para salir del paso.

2º pregunta: Utiliza la mascara @E en el Picture. Ejemplo: "@E99,999.99"

Un saludo.
Lorenzo
[/quote]

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 02:36 PM
    //30 Caracteres a la Isquierda
    Left( Nombre, 30 )

    //20 Caracteres a la derecha
    Right( Nombre, 20 )


O el comando SUBSTR()
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 03:29 PM

LOREN muchas gracias por tu respuesta, lo tengo hecho como indica Karinha, es decir cortando a derecha e izquierda, pero en efecto, queda un poco "Rústico". Probaré con SubStR().

Por otra parte no se como utilizar la claúsula picture en la línea siguiente:

  oPrn:cmSay(18.3,  6.4, "IMPORTE NETO: ", oFont3,,CLR_BLACK,,PAD_LEFT  )

Karinha, gracias, así lo estiy haciendo.

Un saludo.

Saludos. Fernando
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 04:19 PM

Pruaba asi:

oPrn:cmSay(18.3, 6.4, TransForm(nValor,"99.999,99"), oFont3,,CLR_BLACK,,PAD_LEFT )

Salu2

Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 06:11 PM
Willi Quintana wrote:Pruaba asi:

oPrn:cmSay(18.3, 6.4, TransForm(nValor,"99.999,99"), oFont3,,CLR_BLACK,,PAD_LEFT )

Salu2


Muchas gracias Willi.

Funcionó con un solo fallo. No admite el caracter "." como separador de miles y el caracter "," como separador decimal.

Un saludo.
Saludos. Fernando
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 06:19 PM

TransForm(nValor,"@K 99,999.99")

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 07:11 PM

Fernando, respecto de cortar párrafos a una longitud determinada, puedes usar memoline.

Memoline( cString, nAnchoMaximo, nNroDeLinea )

en nAnchoMaximo le dices el máximo que puede tenes cada linea, y nNrodelinea le dices cual linea quieres,

MLCount( cString, nAncho ) te dirá cuantas lineas de máximo nancho tiene cString.

Respecto del transform, para que represente numeros en formato europeo usas "@E 99,999,999,999.99" y cambia las comas por los puntos y viceversa.

Un saludo,

carlos.

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Pregunta sobre CmSay
Posted: Wed Oct 22, 2008 07:38 PM

Buenas noches:

Muchas garcias a todos, pronlema resuelto.

Un saludo.

Saludos. Fernando
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Pregunta sobre CmSay
Posted: Thu Oct 23, 2008 12:32 AM

ACA VA UN EJEMPLO PARA JUSTIFICAR

cTxt:="ESTA ES LA PRUEBA DE IMPRESION DE UN TEXTO DE LONGITUD VARIABLE "+ ;
"EN FORMA JUSTIFICADA A AMBOS LADOS, PUEDE USARSE CON CUALQUIER " + ;
"TIPO DE TEXTO ESPECIALMENTE CON CAMPOS DE TIPO MEMO."
Imp_MemoW(cTxt,oPrn,3.5,6.5,9.0,oFn1,0.4,CLR_BLUE)


/*
Rutina para imprimir campos memo en forma justificada a
ambos lados.

cTxt - dato tipo memo, en relidad basta con que sea texto
oPrn - objeto TPrinter
nRow - renglon
nCol - columna
nWid - ancho m ximo de texo
oFont - fuente
nSkp - salto o espaciado por renglon
nClr - color
*/

FUNCTION Imp_MemoW(cTxt,oPrn,nRow,nCol,nWid,oFont,nSkp,nClr)
LOCAL cLin, lCont:=.T., nP:=0, lNext, cC, nW
DEFAULT nSkp:=0.4, nClr:=0
cTxt:=Alltrim(cTxt)
nW:=nWid-0.2
nRow-=nSkp
oPrn:Cmtr2Pix(0,@nWid)
DO WHILE lCont // un desmadre para separar
cLin:=cC:="" // y justificar los memos!!
lNext:=.T.
DO WHILE oPrn:GetTextWidth(cLin,oFont)<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
cC:=Substr(cTxt,nP+1,1)
IF " "$cLin .AND. cC<>" "
DO WHILE cC<>" " .AND. Len(cLin)>0
cLin:=Substr(cLin,1,Len(cLin)-1)
cC:=Right(cLin,1)
nP--
ENDDO
ELSE
cLin:=Substr(cLin,1,Len(cLin)-2)+"-"
cC:=Right(cLin,1)
nP-=2
ENDIF
oPrn:CmSay(nRow+=nSkp,nCol,Alltrim(cLin),oFont,nW,nClr,,3)
ELSE
oPrn:CmSay(nRow+=nSkp,nCol,Alltrim(cLin),oFont,,nClr)
ENDIF
IF nP>=Len(cTxt)
lCont:=.F.
ENDIF
ENDDO
RETURN (Nil)

Continue the discussion