Page 1 of 1

nClrPane

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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,)}

PostPosted: Mon Mar 26, 2007 5:10 pm
by Raymundo Islas M.
Hola, como se dice : una imagen vale mas que mil palabras :D

A esto me refiero, no se si es lo que Manuel desea.

Image


A diferencia del color alternado por registro, este browse cambia el color por X numero de registros que contenga una poliza.


Saludos a todos

PostPosted: 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

PostPosted: 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

PostPosted: Fri Mar 30, 2007 5:54 am
by Raymundo Islas M.
Hola, un pequeñito ejemplo, de hecho no tiene gran ciencia hacer esto 8)


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

PostPosted: Fri Mar 30, 2007 5:58 am
by Raymundo Islas M.
Sorry :oops:

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()

PostPosted: 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. :D

PostPosted: Fri Mar 30, 2007 11:23 pm
by Raymundo Islas M.
Hola Jose


Agradezco mucho tu comentario ! :P


Saludos