VERTICAL FONT en Report

VERTICAL FONT en Report

Postby Manuel Valdenebro » Mon Nov 17, 2008 8:28 pm

¿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?
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby karinha » Tue Nov 18, 2008 11:17 am

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby Manuel Valdenebro » Tue Nov 18, 2008 6:00 pm



Gracias Karinha por contestar. Pero lo necesito para un REPORT. En Tprinter no tengo problemas. Pero con la clase REPORT se me ocurre ponerlo con un oRpt:SAY(....) pero no consigo que me tome el FONT declarado como vetical.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Esto te puede servir

Postby Ramon Paredes » Wed Nov 19, 2008 3:17 am

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
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Postby Manuel Valdenebro » Wed Nov 19, 2008 5:47 am

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

Stack Calls
===========
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.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby Armando » Wed Nov 19, 2008 2:49 pm

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
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Postby karinha » Wed Nov 19, 2008 3:21 pm

Intente con SAYROTATED()

Code: Select all  Expand view
   ( 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 Nil
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby Manuel Valdenebro » Wed Nov 19, 2008 4:16 pm

Armando 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


Armando, gracias por contestar. Si le pongo a NETSCAPEMENT el valor 900 o -2700, invierte el sentido de las letras hacia la derecha (correcto) pero en ambos casos empeora el tema del margen ya que lo escribe en la columna num. 1.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby Manuel Valdenebro » Wed Nov 19, 2008 4:18 pm

karinha wrote:Intente con SAYROTATED()


Karinha, he incluido el código y me da el siguiente error:

Error description: Error BASE/1004 Message not found: TREPORT:HDC

Stack Calls
===========
Called from: source\rtl\tobject.prg => TREPORT:ERROR(172)
Called from: source\rtl\tobject.prg => TREPORT:MSGNOTFOUND(205)
Called from: source\rtl\tobject.prg => TREPORT:HDC(0)
Called from: a_frutas.prg => SAYROTATED(1709)


¿ NO ES POSIBLE EL USO DEL METODO SAY?
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby karinha » Wed Nov 19, 2008 4:42 pm

Intente en el ON INIT del ACTIVATE REPORT... ???

Creo no sea posible. Mejor és usar TPRINTER mismo.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

SOLUCIONADO

Postby Manuel Valdenebro » Wed Nov 19, 2008 6:26 pm

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.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: SOLUCIONADO

Postby karinha » Wed Nov 19, 2008 7:10 pm

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.


Bién!!

Bela idéa! Parabiéns!

Gracias.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby Armando » Wed Nov 19, 2008 8:32 pm

Bien Manuel, una vez más; el bien triunfa sobre el mal :)

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 85 guests