FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper Ayuda listado en color
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Ayuda listado en color
Posted: Tue Feb 10, 2009 04:16 PM

Estoy intentando imprimir un listado del contenido de una base de datos dando color de fondo a algunas l铆neas en funci贸n del valor de un campo. Son 4 colores distintos, pero no consigo que el color cambie. Toma el color del fondo asignado al primer registro pero no hace ning煤n cambio en el color de fondo.

oReport:bStartLine:= {|o| PONSHADOW(o,oDbf20)}

STATIC FUNCTION PONSHADOW(oReport,oDbf20)
LOCAL vCol:={CLR_YELLOW,CLR_GREEN,CLR_MAGENTA,CLR_BLUE}

IF (oDbf20:cAlias())->Color>0 .AND. (oDbf20:cAlias())->Color<=4 
    oReport:SetShdColor(vCol[(oDbf20:cAlias())->Color])
    oReport:aColumns[1]:lShadow:=.T.
    oReport:aColumns[2]:lShadow:=.T.
ELSE
    oReport:SetShdColor(CLR_LIGHTGRAY)
    oReport:aColumns[1]:lShadow:=.F.
    oReport:aColumns[2]:lShadow:=.F.
ENDIF

RETURN nil

Agradecer铆a cualquier ayuda, incluso la confirmaci贸n de que lo que intento no es posible.
Un Saludo.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda listado en color
Posted: Tue Feb 10, 2009 07:32 PM
Ander,

Tienes un ejemplo completo en samples\report\rep22.prg

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 09:20 AM

Estimado Antonio:

Me vas a perdonar pero soy un poco duro de mollera. He revisado de nuevo el ejemplo que me mencionas (rep22) y aunque es parecido a lo que busco, no produce el efecto que deseo.

El objetivo es que las l铆neas, queden marcadas en diferentes colores, como si se hiciera con los marcadores "subrayadores" manuales que resaltan el texto, y que tanto utilizamos en oficinas. Es decir, el color del texto se mantiene inmutable, cambiando s贸lo el sombreado en algunos casos (shadow).

En el ejemplo que me mencionas se producen cambios en el color del texto, colocando un color especifico a cada definici贸n de fuente; al cambiar de fuente, cambiamos de color al texto. Pero volviendo al ejemplo, en el caso de la sombra, permanece "GREEN" en todo caso, y creo que no es posible asignar un shadow espec铆fico a cada fuente.

Muchas gracias por la atenci贸n que me brindas.
Un Saludo.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 10:04 AM

> como si se hiciera con los marcadores "subrayadores" manuales que resaltan el texto

Ok, entendido lo que deseas hacer.

Vamos a ver la forma de hacerlo y te comentamos.

Cual es tu nombre ? :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 10:28 AM

Muchas gracias, Antonio.

Mi nombre es Ander y llevo trabajando bastante tiempo con FiveWin para CA-Clipper y para Harbour. Tengo un nivel humilde de programaci贸n y s贸lo desarrollo programas para la gesti贸n interna de mi empresa, por lo que hasta ahora he podido solucionar todos los problemas que me han surgido consultando este foro sin necesidad de formular peticiones (creo que de esta forma se aprende m谩s y se molesta mucho menos).
En la actualidad tengo funcionado 6 programas independientes (entre ellos uno de facturaci贸n completa con interacci贸n en CONTAPLUS), que se relacionan entre s铆 formando un Sistema bastante pr谩ctico y muy espec铆fico para mi empresa, pero sobre todo muy adaptado a las continuas modificaciones internas.

Entiendo que debiera migrar a Harbour, pero soy vago y voy poquito a poquito. Las versiones que manejo son la 7.01.

Espero ansioso vuestra respuesta

FWH 12.12 HB 3.2 BCC 5.82
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 12:32 PM
Hola,

algo asi deberia funcionar

   oReport:bstartRecord := { || IF( oDbf20:cAlias())->Color>0 .AND. (oDbf20:cAlias())->Color<=4 ,
                                         ( oReport:SetShdColor(vCol[(oDbf20:cAlias())->Color]),;
                                           AEVAL ( oReport:aColumns, { |c| c:lshadow := .T. } ),;
                                           AEVAL ( oReport:aColumns, { |c| c:lshadow := .F. } );
                                        }


saludos

Marcelo
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 01:14 PM
Marcelo Via Giglio wrote:Hola,

algo asi deberia funcionar

   oReport:bstartRecord := { || IF( oDbf20:cAlias())->Color>0 .AND. (oDbf20:cAlias())->Color<=4 ,
                                         ( oReport:SetShdColor(vCol[(oDbf20:cAlias())->Color]),;
                                           AEVAL ( oReport:aColumns, { |c| c:lshadow := .T. } ),;
                                           AEVAL ( oReport:aColumns, { |c| c:lshadow := .F. } );
                                        }


saludos

Marcelo


Muchisimas gracias por tu respuesta, un c贸digo mucho mejor que el mio, pero con id茅ntico resultado.
Es decir, el resultado que se produce es exactamente el deseado pero en un s贸lo y 煤nico color para todo el reporte; no hay cambios de color en el shadow. Dicho de otra manera la instrucci贸n <<oReport:SetShdColor(vColor)>> s贸lo tiene validez la primera vez que se ejecuta, obviando el resto.

As铆 pues si el primer color que asignamos a SetShdColor es el amarillo, todo el resalte posterior del reporte ser谩 amarillo aunque el segundo registro produzca la intrucci贸n oReport:SetShdColor(CLR_GREEN), es decir el color del shadow no cambia a verde ni a ning煤n otro color. Si resulta que el primer registro no debe ir resaltado el color de shadow sera el gris-claro (por defecto) para todos, independientemente de color que marque oReport:SetShdColor() para el segundo y sucesivos registros.

Un Saludo.
FWH 12.12 HB 3.2 BCC 5.82
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 01:57 PM

Hola,

entonces prueba

oReport:oShdBrush:nRGBColor := vCol[(oDbf20:cAlias())->Color]

en lugar de

oReport:SetShdColor(vCol[(oDbf20:cAlias())->Color])

y nos cuentas si va bien

saludos

Marcelo

Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: Ayuda listado en color
Posted: Wed Feb 11, 2009 03:45 PM
Marcelo Via Giglio wrote:Hola,

entonces prueba

oReport:oShdBrush:nRGBColor := vCol[(oDbf20:cAlias())->Color]

en lugar de

oReport:SetShdColor(vCol[(oDbf20:cAlias())->Color])

y nos cuentas si va bien

saludos

Marcelo


Curioso:
Hecha la modificaci贸n que me indicas:

Si el primer registro a listar no tiene color y por tanto no ha de ir sombreado:
Los registros que si deben tener distintos colores de fondo salen todos en gris claro. Osea, como antes.

Por el contrario, si el primer registri tiene color (amarillo, por ejemplo):
Se produce el siguiente error:

Error description: Error Objects/8 No Object Msg.: UNDEFINED:_NRGBCOLOR

Las ordenes de activar y desactivar las sombrar funciona perfectamente.

Un saludo y siento tantas molestias
FWH 12.12 HB 3.2 BCC 5.82
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda listado en color
Posted: Thu Feb 12, 2009 08:58 AM
Ander,

Prueba asi:
oReport:bStartLine:= { | o | PONSHADOW( o, oDbf20 ) }

STATIC FUNCTION PONSHADOW(oReport,oDbf20)
 
   LOCAL vCol := { CLR_YELLOW, CLR_GREEN, CLR_MAGENTA, CLR_BLUE }

   if oReport:oShdBrush != nil
      oReport:oShdBrush:End()
   endif

   IF (oDbf20:cAlias())->Color>0 .AND. (oDbf20:cAlias())->Color<=4 
      oReport:oShdBrush = TBrush():New( , vCol[(oDbf20:cAlias())->Color] )
      oReport:aColumns[ 1 ]:lShadow := .T.
      oReport:aColumns[ 2 ]:lShadow := .T.
   ELSE
      oReport:oShdBrush = TBrush():New( , CLR_LIGHTGRAY )
      oReport:aColumns[ 1 ]:lShadow := .F.
      oReport:aColumns[ 2 ]:lShadow := .F.
   ENDIF

RETURN nil

Con una peque帽a modificaci贸n en la Clase TReport podemos hacer que cada columna use su propio color de fondo, en caso de que te haga falta :-). La raz贸n es esta:

El m茅todo Shadow() de la Clase TReport usa la DATA oShdBrush (es un brush) para sombrear un elemento, y lo hace desde un bucle, no d谩ndonos opci贸n a cambiarlo. Si hacemos que cada columna tenga un oShdBrush, entonces usariamos el de cada columna, en vez de usar el global de todo el reporte :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: Ayuda listado en color
Posted: Thu Feb 12, 2009 11:15 AM

Estimado Antonio,

SENCILLAMENTE, FENOMENAL.

Eso es precisamente lo que buscaba y no sab铆a c贸mo hacerlo.
Much铆simas gracias.

FWH 12.12 HB 3.2 BCC 5.82
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda listado en color
Posted: Thu Feb 12, 2009 11:30 AM

Me alegro de que te haya funcionado :-)

Aqui estamos para ayudar en todo lo que podamos :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion