Un tercer color en efecto pijama de Listbox

Un tercer color en efecto pijama de Listbox

Postby Pedro » Thu Jan 28, 2010 10:25 am

Hola a todos

Pues eso, si se puede poner un tercer color en el efecto pijama de los listbox, dada una condición de un campo.
Tenemos esto que nos hace el efecto del pijama
Code: Select all  Expand view
     oLbx:nClrPane     := { || IIF( ( oLbx:cAlias)->( OrdKeyNo()) %2 == 1, ;
                               RGB(204,255,255),RGB(127,192,144) )}
 

Pues bien, me gustaría saber si teniendo un campo fecha, podríamos hacer que si el valor de ese campo es superior al día de hoy y otro campo llamado cobrado es falso, el color fuese otro distinto a los dos que se usan para hacer el efecto pijama.
Lo que quiero es que la linea del listbox tome un tercer color en función de esos dos valores que os he puesto de ejemplo.

¿Esto puede ser? y, ¿cómo hacerlo?
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Un tercer color en efecto pijama de Listbox

Postby wmormar » Thu Jan 28, 2010 10:33 am

Pedro,

Code: Select all  Expand view
oLbx:nClrPane     := { || IIF( ( oLbx:cAlias)->( OrdKeyNo()) %2 == 1, ;
                               {CLR_WHITE, if( fecha> date(), CLR_RED,  RGB(204,255,255))}, {CLR_WHITE, if( fecha> date(), CLR_RED,  RGB(127,192,144))} )}
 


Lo hice al vuelo, espero te funcione.
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1073
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: Un tercer color en efecto pijama de Listbox

Postby Pedro » Thu Jan 28, 2010 11:42 am

No funcionó, me pone todo el listbox en negro, así que he tomado la decisión de cambiar el color del texto en función de los dos campos que condicionan el cambio.

Muchas gracias William
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Un tercer color en efecto pijama de Listbox

Postby Manuel Valdenebro » Thu Jan 28, 2010 1:05 pm

Pedro,

Yo lo tengo en una aplicación funcionando con el siguiente código:

oLbx:nClrPane := {|| IIF((oLbx:cAlias)->HDOP<1, CELE,
(IIF((oLbx:cAlias)->HDOP>2, HROJO, GRIS)))}


Donde Hdop es un campo de la tabla y los colores CELE, HROJO Y GRIS, lo tengo definidos en el fichero CH de cabecera.

Normalmente los colores que se aplican es el CELE y el GRIS, y la excepción es cuando HDOP>2
Un saludo

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

Re: Un tercer color en efecto pijama de Listbox

Postby Pedro » Thu Jan 28, 2010 1:31 pm

Hola Manuel

Mi problema es que ésta, es una tabla de cobros, que a lo largo del ejercicio sufre los cambios lógicos de las facturas cobradas, no cobradas, y, dentro de estas últimas, las que se pasan del vencimiento. El tema es que a esas que se han pasado de vencimiento y aún no han sido cobradas me gustaría aplicarles un color diferente a la línea donde están en el Listbox.
Lo que ocurre es que la condición es doble, 1º que la fecha de vencimiento sea inferior al día actual,(con lo cual se advierte que esa línea está fuera de fecha) y que además no esté cobrada, de esa forma sólo aquellos registros que cumplan esa condición deben quedar con un color diferente al del resto, que iría en función de si es par o no el registro, que es lo que se basa inicialmente el efecto pijama de todo el listbox. Así las líneas que estén en fecha y no hayan sido cobradas saldrán con el color elegido para hacer el efecto pijama en todo el listbox. No sé si me he explicado.
Aclarar que cuando hablo de un listbox estoy hablando del Wbrowse que es en lo que se convierte el listbox por el preprocesador.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Un tercer color en efecto pijama de Listbox

Postby Manuel Valdenebro » Thu Jan 28, 2010 4:02 pm

Solo tienes que trabajar un poco el código.

Suponemos que los colores pijama son CELE y GRIS.

Los campos son FVto para lafecha de vencimiento y el campo logico COBRADO.


oLbx:nClrPane:={|| IIF((oLbx:cAlias)->FVTO <= DATE() .and. ! (oLbx:cAlias)->COBRADO, HROJO, ;
(IIF((oLbx:cAlias)->(OrdKeyNo())%2==0,CELE, GRIS)) ) }


Fíjate que la primera parte del IIF se refiere a que cumpla la condición y lo ponemos en rojo. Si no cumple la primera condición, vendria otros IIF con el pijama normal.

A mi me funciona perfectamente. Si no te sale, trabaja el código un poco.
Un saludo

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

Re: Un tercer color en efecto pijama de Listbox

Postby Francisco Horta » Thu Jan 28, 2010 4:21 pm

Pedro,
Si se puede hacer, yo lo hago usando wbrowse de hdc, te adjunto unas imagenes y omo usar los colores por texto, por columna, por linea, en encabezado, en celda activa, en footers, en browse normal...

caso 1
Image
aqui el codigo:
oBrw[x]:bBkColor := { | nRow, nCol, nStyleLine | ColoresCelda( nRow, nCol, nStyleLine, oFolder ) }
oBrw[x]:bTextColor := { | nRow, nCol, nStyleLine | ColoresTexto( nRow, nCol, nStyleLine, oFolder ) }
oBrw[x]:bFont := {|nRow,nCol,nStyleLine| SeleccionaFuente( nRow, nCol, nStyleLine, ;
oFont[1], oFont[2], oFont[3] ) }

HE AQUI EL TRUCO DE ESTO, PUEDES PONER TODAS LAS CONDICIONANTES QUE QUIERAS

STAT Function SeleccionaFuente( pnRow, pnCol, pnStyle, oF1, oF2, oF3 )
local cFont

if pnStyle = 0 .AND. pnCol < 35 ; cFont := oF1:hFont // celda standard normal
elseif pnStyle = 0 .AND. pnCol = 35 ; cFont := oF3:hFont // celda standard normal y columna total
elseif pnStyle = 1 ; cFont := oF2:hFont // celda header
elseif pnStyle = 2 ; cFont := oF2:hFont // celda footer
elseif pnStyle = 3 .AND. pnCol > 3 .AND. pnCol < 35 ; cFont := oF1:hFont // celda standard normal seleccionada
elseif pnStyle = 3 .AND. pnCol = 35 ; cFont := oF3:hFont // celda standard normal seleccionada
endif

Return( cFont )

STAT Function ColoresCelda( pnRow, pnCol, pnStyle, oFolder )
local cColor, nPaso
local cCampo := "", i := 0

if pnStyle = 0 .and. pnCol = 2 ; cColor := nRGB(177,216,255)
elseif pnStyle = 0 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := nRGB(172,168,153)
elseif pnStyle = 0 .AND. pnCol = 3 ; cColor := nRGB(177,216,255)
elseif pnStyle = 0 .AND. pnCol = 1 ; cColor := GETSYSCOLOR(COLOR_BTNFACE)
elseif pnStyle = 1 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := nRGB(172,168,153)
elseif pnStyle = 2 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := nRGB(172,168,153)
elseif pnStyle = 0 .AND. pnCol = 35 ; cColor := nRGB(215,215,0)
endif

Return( cColor )

// Establecemos los colores de Letra para las celdas
STAT Function ColoresTexto( pnRow, pnCol, pnStyle, oFolder )
local cColor, nPaso, i:=0, cCampo:=""

if pnStyle = 0 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := CLR_GRAY
elseif pnStyle = 0 .AND. pnCol = 35 ; cColor := CLR_BLUE
elseif pnStyle = 1 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := CLR_GRAY
elseif pnStyle = 2 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := CLR_GRAY
elseif pnStyle = 3 .AND. pnCol > 3 .AND. pnCol < 35 ; cColor := CLR_WHITE
elseif pnStyle = 3 .AND. pnCol = 35 ; cColor := CLR_YELLOW
elseif pnStyle = 2 .AND. pnCol > (aMes[oFolder:nOption,2]+3) .AND. pnCol < 35 ; cColor := CLR_GRAY
endif

return( cColor )


CA
    ____________________
    Paco
    Francisco Horta
     
    Posts: 845
    Joined: Sun Oct 09, 2005 5:36 pm
    Location: la laguna, mexico.

    Re: Un tercer color en efecto pijama de Listbox

    Postby Francisco Horta » Thu Jan 28, 2010 4:26 pm

    Pedro, sorry me falto una mas

    CASO 2
    Image

    he aqui el codigo
    oBCmp:nClrPane := {|| IIF((oBCmp:cAlias)->(OrdKeyNo())%2==0,nRGB(248,248,248),nRGB(220,255,220))} //236,255,236
    oBCmp:bTextColor:={|nRow,nCol,nStyleLine| IF(nCol>1 .AND. nStyleLine=0 .AND. (oDCmp)->Status=="C",CLR_HRED,)}

    oBCmp:bBkColor := {|nRow,nCol,nStyle| If( nStyle==0 .and. nCol==1, ;
    GETSYSCOLOR(COLOR_BTNFACE), ;
    If( nCol==1 .AND. nStyle=3 .AND. !oBArt:lCellStyle, ;
    GETSYSCOLOR(COLOR_BTNFACE),))}

    oBCmp:bFont := {|nRow,nCol,nStyleLine| ;
    IF(nStyleLine==1 .AND. nCol==2,oFnt:hFont,) }

    Espero sea de tu utilidad
    Saludos
    Paco
    ____________________
    Paco
    Francisco Horta
     
    Posts: 845
    Joined: Sun Oct 09, 2005 5:36 pm
    Location: la laguna, mexico.

    Re: Un tercer color en efecto pijama de Listbox

    Postby Pedro » Thu Jan 28, 2010 5:09 pm

    Hola Francisco
    El tema de poner la letra en otro color es lo que he hecho, eso no es difícil en el Wbrowse con nClrText. El tema es que quería hacerlo con la línea como dice Manuel.
    Manuel me estaba currando el código indicado en tu idea, pero no me salía, en algunos tramos el efecto se iba dejando con un solo color el listbox. Seguiré con esta nueva idea que me aportas, no había pensado quitar de inicio el tema del recno() y ponerlo como segunda condicion, lo miro y te digo algo.
    Un saludo
    Pedro
    gahetesoft@gmail.com
    FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
    y ahora con ADO
    User avatar
    Pedro
     
    Posts: 464
    Joined: Tue Mar 21, 2006 7:30 pm
    Location: Córdoba (España)

    Re: Un tercer color en efecto pijama de Listbox

    Postby Pedro » Thu Jan 28, 2010 5:26 pm

    Perfecto Manuel, poniendo como segunda condición si es 2 o no el efecto sale perfecto, me pone las lineas en rojo que son propias de la condición y el resto me lo deja como debe ser.

    Muchas gracias
    Un saludo
    Pedro
    gahetesoft@gmail.com
    FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
    y ahora con ADO
    User avatar
    Pedro
     
    Posts: 464
    Joined: Tue Mar 21, 2006 7:30 pm
    Location: Córdoba (España)

    Re: Un tercer color en efecto pijama de Listbox

    Postby Francisco Horta » Fri Jan 29, 2010 2:01 am

    Pedro, que bueno que ya te funciono, nomas como comentario adicional y se me paso decirtelo, en cada funcion tanto de colorcelda como en el bloque bBkColor hay que ir priorizando las condicionantes correctamente para que te vaya respetando el pintado, me paso que yo las puse como me dio la gana y no me salia, hay que ir poniendola en orden de importancia, como quieras los colores.
    Saludos
    Paco
    ____________________
    Paco
    Francisco Horta
     
    Posts: 845
    Joined: Sun Oct 09, 2005 5:36 pm
    Location: la laguna, mexico.

    Re: Un tercer color en efecto pijama de Listbox

    Postby ACC69 » Fri Nov 18, 2011 10:13 pm

    Francisco Horta wrote:Pedro, sorry me falto una mas

    CASO 2
    Image

    he aqui el codigo
    oBCmp:nClrPane := {|| IIF((oBCmp:cAlias)->(OrdKeyNo())%2==0,nRGB(248,248,248),nRGB(220,255,220))} //236,255,236
    oBCmp:bTextColor:={|nRow,nCol,nStyleLine| IF(nCol>1 .AND. nStyleLine=0 .AND. (oDCmp)->Status=="C",CLR_HRED,)}

    oBCmp:bBkColor := {|nRow,nCol,nStyle| If( nStyle==0 .and. nCol==1, ;
    GETSYSCOLOR(COLOR_BTNFACE), ;
    If( nCol==1 .AND. nStyle=3 .AND. !oBArt:lCellStyle, ;
    GETSYSCOLOR(COLOR_BTNFACE),))}

    oBCmp:bFont := {|nRow,nCol,nStyleLine| ;
    IF(nStyleLine==1 .AND. nCol==2,oFnt:hFont,) }

    Espero sea de tu utilidad
    Saludos
    Paco



    Hola Francisco, buenas tardes como estas mi buen,antes que nada le envio cordiales saludos.

    1.- ando buscando como hacer en tiempo de ejecucion, que me cambie el nombre del titulo en Header, que por default, este en la cabecera como Header "Costo Unit" y que luego si desde una condicion dada sea como ventas, que me cambie en tiempo de ejecucion Header "Precio Unit", pero al parecer no me hace el efecto, no me refresca el Header, le pongo oListBox:Refresh() , pero nada, sera que no refresca la Cabecera del Header?. Uso TWBrowse de Hernan Cecarreli.

    2.- Viendo tu imagen, como le haces para centrar los encabezados del Header, porque yo en mi aplicacion, no me sale, si lo centra, pero me centra hasta los datos, tanto numericos, caracter,fecha, etc etc, cuando lo unico que quiero es centrar los encabezados del Header,seria tan amable de poner un trozo de codigo ?

    Gracias esperando contar con tu ayuda, con los dos puntos que mencione, asi como tambien si alguien mas tiene implementado de como hacer el cambio en tiempo de ejecucion los Header.

    Saludos desde Cancun

    Atte: Adrian C. C.

    acc69@hotmail.com
    ACC69
     
    Posts: 632
    Joined: Tue Dec 12, 2006 7:34 pm

    Re: Un tercer color en efecto pijama de Listbox

    Postby Francisco Horta » Sat Nov 19, 2011 5:51 pm

    Adrian,
    vamos a ver tus puntos

    1. aHeaders := {"id","nombre","Costo Unitario"}
    aHeadersNew := {"id","descripcion","Precio Unitario"}

    REDEFINE LISTBOX oBrw ID 100 OF oDlg FIELDS ""

    oBrw:aHeaders := aHeaders
    luego en tu condicion en una funcion puedes hacer esto
    oBrw:aHeaders := {}
    oBrw:aHeaders := aHeadersNew
    oBrw:Refresh()

    2. para centrar encabezados
    oBrw:aHJustify := {2,2,2} donde 0->izquierda 1->derecha 2->centrado

    saludos
    paco
    ____________________
    Paco
    Francisco Horta
     
    Posts: 845
    Joined: Sun Oct 09, 2005 5:36 pm
    Location: la laguna, mexico.

    Re: Un tercer color en efecto pijama de Listbox

    Postby ACC69 » Thu Nov 24, 2011 5:48 pm

    Francisco Horta wrote:Adrian,
    vamos a ver tus puntos

    1. aHeaders := {"id","nombre","Costo Unitario"}
    aHeadersNew := {"id","descripcion","Precio Unitario"}

    REDEFINE LISTBOX oBrw ID 100 OF oDlg FIELDS ""

    oBrw:aHeaders := aHeaders
    luego en tu condicion en una funcion puedes hacer esto
    oBrw:aHeaders := {}
    oBrw:aHeaders := aHeadersNew
    oBrw:Refresh()

    2. para centrar encabezados
    oBrw:aHJustify := {2,2,2} donde 0->izquierda 1->derecha 2->centrado

    saludos
    paco


    Buenos dias Francisco,disculpa que apenas responda a tu respuesta,me encontraba fuera de la ciudad y nuevamente gracias,por responder,adjunto codigo e imagen, o yo no me entendi, o yo no le hallo, donde incluir para que me refresque el Header.

    REDEFINE GET oG_C[05] VAR nCveConce ID 105 OF oDlg PICTURE "99" ;
    ACTION (SelConcepto(@nCveConce,S22,"nCveConce",oG_C[05]));
    VALID V_CONCEPTO()

    REDEFINE LISTBOX oLbx2 ;
    FIELDS TRIM((S24)->CVEART),TRANS((S24)->CANTIDAD,cPict1),IF( (S22)->STATMOV="E",TRANS((S24)->COSTUNIT,cPict1),;
    TRANS((S24)->PREPUBLI,cPict1) ),;
    TRANS((S24)->IMPORTE,cPict1) ;
    HEADER "Clave","Cantidad",cCostPreP, "Importe";
    SIZES 95,60,70,70;
    ALIAS (S24)->(ALIAS()) ID 111 OF oDlg

    oLbx2:aHJustify := {2,2,2,2}
    oLbx2:aJustify := {0,0,1,1}
    oLbx2:lDrawFooters := .T.
    oLbx2:lCellStyle := .T.
    oLbx2:lAdjLastCol := .F.
    oLbx2:nHeaderHeight:= 15
    oLbx2:nFooterHeight:= 15
    oLbx2:nClrForeHead := CLR_BLUE

    Nota: La variable cCostPreP ,es el que viene desde la funcion V_Concepto()
    //------------------------------------------------------------------------------
    STATIC FUNCTION V_CONCEPTO()

    (S22)->(DbSeek(STR(nCveConce,2)))

    IF (S22)->(!FOUND())
    MsgAlert("Error: No existe Num. de concepto","Verifique")

    RETURN .F.
    ENDIF

    lCostPreP := .F.
    cDescConce:= (S22)->DESCCONCE
    cTipoMov := (S22)->TIPOMOV
    nCvePrvCli:= 0
    cCveArt := SPACE(14)
    nCostPreP := 0

    IF (S22)->STATMOV = "E"
    cCostPreP := "Costo Unit"
    ELSE
    cCostPreP := "Prec Púb"
    ENDIF

    DO CASE
    CASE (S22)->ASOCIADO == "P"
    cSProv_Cli := "Provedor"

    oG_C[06]:Show() // Mostrar Proveedor o Cliente en Get
    oS_C[04]:Show() // Mostrar Proveedor o Cliente en Say
    CASE (S22)->ASOCIADO == "C"
    cSProv_Cli := "Cliente"

    oG_C[06]:Show()
    oS_C[04]:Show()
    OTHERWISE
    cSProv_Cli := ""

    oG_C[06]:Hide()

    AEval( oG_C,{|o| o:Disable()} )
    AEval( oG_C,{|o| o:Refresh()} )

    AEval( oG_D,{|o| o:Enable()} )
    AEval( oG_D,{|o| o:Refresh()} )

    AEval( oBtn,{|o| o:ENABLE()} )
    AEval( oBtn,{|o| o:REFRESH()} )

    lEnd := .F.
    lCap := .F.
    ENDCASE

    oG_C[06]:Refresh() // Refresca Clave Proveedor ó Cliente en Cabecera Get
    oS_C[01]:Refresh() // Refresca Descripción Concepto en Cabecera Say Prompt
    oS_C[02]:Refresh() // Refresca Tipo de movimiento en Cabecera Say Prompt
    oS_C[03]:Refresh() // Refresca Proveedores ó Clientes en Cabecera Say Prompt

    oS_D[01]:Refresh() // Refresca Costo ó Precio Público en Detalle Say Prompt

    oG_D[01]:Refresh() // Refresca Clave de Articulo en Detalle Get
    oG_D[03]:Refresh() // Refresca Costo ó Precio Público en Detalle Get

    oLbx2:Refresh() // Refresca cambio de Costo Unit ó Prec Púb.
    RETURN (.T.)

    Adjunto la imagen....

    [img][img]http://imageshack.us/photo/my-images/94/cambioprecpub.jpg/[/img][/img]

    http://imageshack.us/photo/my-images/94/cambioprecpub.jpg/

    Espero haberme explicado, Francisco,le envio un cordial saludos, y que tenga un excelente dia.

    Saludos y buen dia.

    acc69@hotmail.com
    ACC69
     
    Posts: 632
    Joined: Tue Dec 12, 2006 7:34 pm

    Re: Un tercer color en efecto pijama de Listbox

    Postby Francisco Horta » Thu Nov 24, 2011 6:53 pm

    Adrian,
    pasale el parametro asi :

    VALID V_Concepto(@cCostPrep,oLbx2)

    y sustituye
    STATIC FUNCTION V_CONCEPTO(cCostPrep,oLbx2)

    y me comentas
    salu2
    paco
    ____________________
    Paco
    Francisco Horta
     
    Posts: 845
    Joined: Sun Oct 09, 2005 5:36 pm
    Location: la laguna, mexico.

    Next

    Return to FiveWin para Harbour/xHarbour

    Who is online

    Users browsing this forum: Google [Bot] and 65 guests