¿Es posible imprimir en un report, una linea vertical?
Lo he intentado emulando lo que ya hago con Tprinter, usando un font y NESCAPEMENT 900, y aplicandolo a un SAY, pero me da error.
¿Alguien lo ha conseguido?
Manuel
¿Es posible imprimir en un report, una linea vertical?
Lo he intentado emulando lo que ya hago con Tprinter, usando un font y NESCAPEMENT 900, y aplicandolo a un SAY, pero me da error.
¿Alguien lo ha conseguido?
karinha wrote:Buen dia...
http://www.fivewin.com.br/forum/topic.a ... C_ID=11037
Saludos.
Hola Manuel,
Ojala sea esto lo que andas buscando, como poner con treport un dato vertical, prueba esto :
Local oFnt,oFnt2,oPen1,oReport,oFont9,oFont10
DEFINE FONT oFnt NAME "Arial" SIZE 0,-10
DEFINE FONT oFnt2 NAME "Arial" SIZE 0,-8 NESCAPEMENT 900
DEFINE FONT oFont9 NAME "Arial" SIZE 0,-14 UNDERLINE NESCAPEMENT -900
DEFINE FONT oFont10 NAME "Times New Roman" SIZE 0,-56 NESCAPEMENT -450
DEFINE PEN oPen1 WIDTH 2
REPORT oReport CAPTION "FACTURA Nº 123456" ;
FONT oFnt,oFnt2 ;
PEN oPen1 ;
TITLE "Titulo " LEFT ;
HEADER "Cabeceras" ;
FOOTER "Se puede Imprimir un Centrado al PIE de Pagina" ,;
"Despues un Titulo Vertical centrado ...." CENTER ;
PREVIEW
COLUMN TITLE "Nueva Columna " DATA "ESTA ES LA COLUMNA DE DATOS"
oReport:oFooter:aFont[1] := {|| 1 }
oReport:oFooter:aFont[2] := {|| 2 }
oReport:oFooter:aPad[2] := 1
END REPORT
ACTIVATE REPORT oReport
oPen1:End()
oFnt:End()
oFont9:End()
oFont10:end()
oFnt2:End()
RETURN NIL
Saludes desde Managua, Nicaragua
Ramon Paredes
Ramon, muchas gracias por tu ayuda. Se acerca bastante, pero no consigue lo que
realmente necesito. Me explico con mas detalle.
Es contumbre en algunas empresas españolas (sociedades limitadas y anónimas)
indicar en el margen izquierdo de sus documentos (facturas, cartas, etc) los
datos registrales y fiscales de dicha sociedad. En las aplicaciones que tengo
en uso, en las facturas, vengo indicando dichos datos con la clase Tprinter:
http://perso.wanadoo.es/cris-rueda/screen1.jpg
Ahora quiero hacer lo mismo, pero en los documentos que genero con la clase
Treport.
La solución de Ramón, tiene dos inconvenientes:
1) La leyenda no sale en el extremo de la página, sino que deja el margen
normal.
2) La leyenda se escribe con las letras hacia afuera y no hacia adentro.
http://perso.wanadoo.es/cris-rueda/screen2.jpg
Creo que la solución está en el método SAY de la propia clase Treport, que a
su vez usa el método de la propia clase Tprinter. Pero al usarlo me da el
siguiente error al compilar:
oReport:Say( 1, "Texto vertical", 4, 1, 5 )
Error description: Error BASE/1111 Error de argumento: LEN
Args:
[ 1] = U
Called from: => LEN(0)
Called from: .\source\classes\REPORT.PRG => TREPORT:SAY(0)
¿Alguien ha usado el método SAY de la clase TReport? Creo que el tema es
importante, ya que el uso de este método complementarÃa TReport.
Muchas gracias por vuestra ayuda.
Manuel:
Si no recuerdo mal, ahoro no estoy en mi pc para leer la doc, en el valor del NETSCAPEMENT puedes darle un valor positivo o negativo, si el valor es negativo el texto gira en el sentido de las manecillas del reloj, pero si es positivo gira en sentido contrario.
Entonces, se me ocurre que puedes probar con un valor positivo o bien un valor negativo más alto que haga girar más al texto hasta lograr el sentido que deseas.
Saludos
( SayRotated( oReport, 260, 10, ;
"Ventas ", oFont1,,, .t. ), ;
SayRotated( oReport, 150, 500, "About ", oFont2, ;
CLR_HRED, CLR_YELLOW, .F. ) )
//---------------------------------------------------------------------------//
Function SayRotated( oWnd, Y, X, cPrompt, oFont, nClrText, nClrPane, l3D )
Local hDC := oWnd:hDC
DEFAULT nClrText := CLR_HRED, l3D := .T.
IF l3D
DrawRotated( hdc, cPrompt, Y + 1, X + 1, CLR_BLACK, nClrPane, oFont )
DrawRotated( hdc, cPrompt, Y - 1, X - 1, nClrText, nClrPane, oFont )
ENDIF
DrawRotated( hdc, cPrompt, Y , X , nClrText, nClrPane, oFont )
Return Nil
//----------------------------------------------------------------------------
Static Function DrawRotated( hDC, cPrompt, Y, X, nClrText, nClrPane, oFont )
Local hOldFont, nOldMode, nOldClrText, nOldClrPane, nOldBkMode
nOldClrText := SetTextColor( hDC, nClrText )
if nClrPane <> Nil
nOldClrPane := SetBkColor( hDC, nClrPane )
else
nOldBkMode := SetBkMode( hDC,1 )
Endif
hOldFont := SelectObject( hDC, oFont:hFont )
TextOut( hDC, Y, X, cPrompt, Len( cPrompt ) )
SelectObject( hDC, hOldFont )
if nClrPane<>nil
SetBkColor( hDC, nOldClrPane )
else
SetBkMode( hDC, nOldBkMode )
Endif
SetTextColor( hDC, nOldClrText )
Return NilArmando wrote:Manuel:
Si no recuerdo mal, ahoro no estoy en mi pc para leer la doc, en el valor del NETSCAPEMENT puedes darle un valor positivo o negativo, si el valor es negativo el texto gira en el sentido de las manecillas del reloj, pero si es positivo gira en sentido contrario.
Entonces, se me ocurre que puedes probar con un valor positivo o bien un valor negativo más alto que haga girar más al texto hasta lograr el sentido que deseas.
Saludos
karinha wrote:Intente con SAYROTATED()
Intente en el ON INIT del ACTIVATE REPORT... ???
Creo no sea posible. Mejor és usar TPRINTER mismo.
Saludos.
Como bien dice Karinha no es posible, porque la clase Treport impide escribir fuera de los margenes. Por ello, he modificado dicha clase y todo solucionado.
En el método SAY de Treport, en el DO CASE, he añadido un nuevo caso, con los datos siguientes:
do case
case nPad == 8
nStartCol := 75
En la aplicación en el ACTIVATE del report:
ACTIVATE REPORT oReport ;
ON ENDPAGE (oReport:NewLine(), ;
oReport:Say( 1, "texto que quiero poner en vertical", 4, 8, 5500 ))
4 = DEFINE FONT oFonV NAME "ARIAL" SIZE 0,-10 NESCAPEMENT -2700
8 = para que el Report tome este nPad
y todo solucionado como querÃa.
Gracias a Armando y Karinha por su ayuda.
Manuel Valdenebro wrote:Como bien dice Karinha no es posible, porque la clase Treport impide escribir fuera de los margenes. Por ello, he modificado dicha clase y todo solucionado.
En el método SAY de Treport, en el DO CASE, he añadido un nuevo caso, con los datos siguientes:
do case
case nPad == 8
nStartCol := 75
En la aplicación en el ACTIVATE del report:
ACTIVATE REPORT oReport ;
ON ENDPAGE (oReport:NewLine(), ;
oReport:Say( 1, "texto que quiero poner en vertical", 4, 8, 5500 ))
4 = DEFINE FONT oFonV NAME "ARIAL" SIZE 0,-10 NESCAPEMENT -2700
8 = para que el Report tome este nPad
y todo solucionado como querÃa.
Gracias a Armando y Karinha por su ayuda.
Bien Manuel, una vez más; el bien triunfa sobre el mal
Saludos