FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Un tercer color en efecto pijama de Listbox
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Un tercer color en efecto pijama de Listbox
Posted: 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 (fw): Select all Collapse
 聽 聽 聽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
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 10:33 AM
Pedro,

Code (fw): Select all Collapse
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
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: 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
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 01: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
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 01: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
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 04: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)-&gt;FVTO &lt;= DATE() .and. ! (oLbx:cAlias)-&gt;COBRADO, HROJO, ;
       (IIF((oLbx:cAlias)-&gt;(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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 04: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

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
    [/list:u]
____________________

Paco
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 04:26 PM
Pedro, sorry me falto una mas

CASO 2


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
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 05: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
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Jan 28, 2010 05: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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Fri Jan 29, 2010 02: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
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Fri Nov 18, 2011 10:13 PM
Francisco Horta wrote:Pedro, sorry me falto una mas

CASO 2


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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Sat Nov 19, 2011 05: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
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Nov 24, 2011 05: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]

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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Un tercer color en efecto pijama de Listbox
Posted: Thu Nov 24, 2011 06: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