Page 1 of 1
nClrPane
Posted: Sat Mar 24, 2007 10:27 pm
by Manuel Aranda
Después de varias horas con este asunto no doy con la tecla.
En un listbox cambio el color de fondo alternando entre un registro y otro de la forma siguiente:
oLbx:nClrPane:={|| IIF(CLIENTES->(OrdKeyNo())%2==0,CLR_WHITE,CLR_LGRAY)}
Pero lo que quiero hacer es que en un listbox ordenado por un campo clave, me cambie el color alternativamente cuando cambie el valor de ese campo.
A alguien se le ocurre por donde tirar?
Un saludo,
Manuel Aranda
Posted: Mon Mar 26, 2007 12:47 am
by Raymundo Islas M.
Manuel
Basta con que agregues un campo adicional ( normalmente uso un numerico de 1 digito ) y al momento de estar "llenando" la base a mostrar vas alternando el valor de ese campo ( normalmente uso 0-1 ) y solo cambias el codigo por esto :
oLbx:nClrPane:={|| IIF(CLIENTES->TuCampo ==1,CLR_WHITE,CLR_LGRAY)}
Asi lo he usado y hace exactamente lo que quieres hacer.
Saludos
Posted: Mon Mar 26, 2007 4:47 am
by Manuel Valdenebro
Raymundo Islas M. wrote:
Asi lo he usado y hace exactamente lo que quieres hacer.
Ray,
Yo entiendo que lo que Manuel quiere es otra cosa. Tiene un campo clave (por ejemplo, ciudad) y tiene ordenado por este campo la base de datos:
ALICANTE
ALICANTE
ALICANTE
BARCELONA
BARCELONA
MALAGA
MALAGA
MALAGA
Lo que yo entiendo que quiere ( y es muy interesante), es que cada vez que el listbox cambie de ciudad (el bloque de registros) cambie el color.
Creo que con el método del "llenado" la cosa sería complicada, sobretodo, si desde el listbox modificaramos los datos.
Esta es la instrucción
Posted: Mon Mar 26, 2007 4:44 pm
by ACC69
Manuel Valdenebro wrote:Raymundo Islas M. wrote:
Asi lo he usado y hace exactamente lo que quieres hacer.
Ray,
Yo entiendo que lo que Manuel quiere es otra cosa. Tiene un campo clave (por ejemplo, ciudad) y tiene ordenado por este campo la base de datos:
ALICANTE
ALICANTE
ALICANTE
BARCELONA
BARCELONA
MALAGA
MALAGA
MALAGA
Lo que yo entiendo que quiere ( y es muy interesante), es que cada vez que el listbox cambie de ciudad (el bloque de registros) cambie el color.
Creo que con el método del "llenado" la cosa sería complicada, sobretodo, si desde el listbox modificaramos los datos.
oLbx:bTextColor := {|nRow,nCol,nStyle| IF(nCol=4 .AND.;
nStyle=0 .AND. ;
S96->REFERE=ALLTRIM(cBuscPal),CLR_GREEN,)}
Posted: Mon Mar 26, 2007 5:10 pm
by Raymundo Islas M.
Hola, como se dice : una imagen vale mas que mil palabras
A esto me refiero, no se si es lo que Manuel desea.
A diferencia del color alternado por registro, este browse cambia el color por X numero de registros que contenga una poliza.
Saludos a todos
Posted: Mon Mar 26, 2007 9:49 pm
by Manuel Aranda
Muchas gracias, Raymundo. Es lo que buscaba. Me pongo a ello ahora mismo.
Un saludo,
Manuel
Posted: Tue Mar 27, 2007 1:47 am
by Ale SB
Raymundo Islas M. wrote:Manuel
Basta con que agregues un campo adicional ( normalmente uso un numerico de 1 digito ) y al momento de estar "llenando" la base a mostrar vas alternando el valor de ese campo ( normalmente uso 0-1 ) y solo cambias el codigo por esto :
oLbx:nClrPane:={|| IIF(CLIENTES->TuCampo ==1,CLR_WHITE,CLR_LGRAY)}
Asi lo he usado y hace exactamente lo que quieres hacer.
Saludos
Buenas Raymundo,
Nao estou entende bem, eu teria q usar alguma funçao ?
Vc poderia me passar algum exemplo ?
Fico grato pela atençao.
@braços Ale
Posted: Fri Mar 30, 2007 5:54 am
by Raymundo Islas M.
Hola, un pequeñito ejemplo, de hecho no tiene gran ciencia hacer esto
REDEFINE LISTBOX lbKrdOpr ;
FIELDS DETKDX->KDAT,DETKDX->KPOL, ..... ;
HEAD "FECHA","POLIZA", ...... ;
bla ;
bla ;
bla ;
OF oFold:aDialogs[7]
bla ;
bla ;
bla ;
lbKrdOpr:nClrPane := { || IIF( DETKDX->KCLR == 0, CLR_A, CLR_B ) } <--- Aqui
Static Function XXXXXXX() // para "llenar" la base o arreglo
LOCAL nQ,
nClrFlg := 0
FOR nQ := aKrdDts[4] TO aKrdDts[5]
IF MOVSYS->( DbSeek( DtoS( nQ ) ) )
WHILE MOVSYS->MFECHA == nQ .AND. MOVSYS->( !Eof() )
nKrdxPol := MOVSYS->MPOL
WHILE MOVSYS->MPOL == nKrdxPol .AND. MOVSYS->( !Eof() )
DETKDX->KDAT := XXXXXX
DETKDX->KPOL := YYYYYY
MOVSYS->( DbSkip() )
ENDDO
nClrFlg ++ <--- Aqui
nClrFlg := IIF( nClrFlg == 2, 0, nClrFlg ) <--- Aqui
ENDDO
ENDIF
NEXT
lbKrdOpr:REFRESH()
Saludos
Posted: Fri Mar 30, 2007 5:58 am
by Raymundo Islas M.
Sorry
Se me paso la linea donde se graba el valor que indica el color a usar :
Static Function XXXXXXX() // para "llenar" la base o arreglo
LOCAL nQ,
nClrFlg := 0
FOR nQ := aKrdDts[4] TO aKrdDts[5]
IF MOVSYS->( DbSeek( DtoS( nQ ) ) )
WHILE MOVSYS->MFECHA == nQ .AND. MOVSYS->( !Eof() )
nKrdxPol := MOVSYS->MPOL
WHILE MOVSYS->MPOL == nKrdxPol .AND. MOVSYS->( !Eof() )
DETKDX->KDAT := XXXXXX
DETKDX->KPOL := YYYYYY
DETKDX->KCLR := nClrFlg <--- Aqui
MOVSYS->( DbSkip() )
ENDDO
nClrFlg ++ <--- Aqui
nClrFlg := IIF( nClrFlg == 2, 0, nClrFlg ) <--- Aqui
ENDDO
ENDIF
NEXT
lbKrdOpr:REFRESH()
Posted: Fri Mar 30, 2007 10:50 pm
by jose_murugosa
Raymundo,
Que soberbio ejemplo, mezcla de simplicidad, practicidad y buen gusto.
Gracias por compartirlo con nosotros.
Posted: Fri Mar 30, 2007 11:23 pm
by Raymundo Islas M.
Hola Jose
Agradezco mucho tu comentario !
Saludos