Ayuda listado en color
Ayuda listado en color
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.
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda listado en color
Ander,
Tienes un ejemplo completo en samples\report\rep22.prg
Tienes un ejemplo completo en samples\report\rep22.prg
Re: Ayuda listado en color
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 _ (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.
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 _ (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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda listado en color
> 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 ?
Ok, entendido lo que deseas hacer.
Vamos a ver la forma de hacerlo y te comentamos.
Cual es tu nombre ?
Re: Ayuda listado en color
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
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: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: Ayuda listado en color
Hola,
algo asi deberia funcionar
saludos
Marcelo
algo asi deberia funcionar
Code: Select all
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. } );
}
Marcelo
Re: Ayuda listado en color
Muchisimas gracias por tu respuesta, un código mucho mejor que el mio, pero con idéntico resultado.Marcelo Via Giglio wrote:Hola,
algo asi deberia funcionar
saludosCode: Select all
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. } ); }
Marcelo
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: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: Ayuda listado en color
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
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
Re: Ayuda listado en color
Curioso: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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda listado en color
Ander,
Prueba asi:
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
Prueba asi:
Code: Select all
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
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
Re: Ayuda listado en color
Estimado Antonio,
SENCILLAMENTE, FENOMENAL.
Eso es precisamente lo que buscaba y no sabía cómo hacerlo.
Muchísimas gracias.
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda listado en color
Me alegro de que te haya funcionado
Aqui estamos para ayudar en todo lo que podamos
Aqui estamos para ayudar en todo lo que podamos