FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour VERTICAL FONT en Report
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
VERTICAL FONT en Report
Posted: Mon Nov 17, 2008 08: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
VERTICAL FONT en Report
Posted: Tue Nov 18, 2008 11:17 AM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
VERTICAL FONT en Report
Posted: Tue Nov 18, 2008 06:00 PM
karinha wrote:Buen dia...

http://www.fivewin.com.br/forum/topic.a ... C_ID=11037

Saludos.


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
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
Esto te puede servir
Posted: Wed Nov 19, 2008 03: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......
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 05: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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 02: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 03:21 PM
Intente con SAYROTATED()

   ( 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
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 04: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
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 04: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 04: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
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
SOLUCIONADO
Posted: Wed Nov 19, 2008 06: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: SOLUCIONADO
Posted: Wed Nov 19, 2008 07: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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
VERTICAL FONT en Report
Posted: Wed Nov 19, 2008 08: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

Continue the discussion