Muy buenas, estoy intentando coloreas celdas de un TwBrowse según parametros pero no lo consigo, mi versión es FWH712 y XHB 1.1.0, hay algún ejemplo por ahí.
Un Saludo.
Muy buenas, estoy intentando coloreas celdas de un TwBrowse según parametros pero no lo consigo, mi versión es FWH712 y XHB 1.1.0, hay algún ejemplo por ahí.
Un Saludo.
Anderson mi problema es pintar celdas individuales no filas, ¿Me podrías decir como lo puedo conseguir?
Un Saludo.
Usando la clase TWBrowse estandard de FWH no puedes colorear celdas individuales. Necesitarías usar la clase TCBrowse, que requiere algunos cambios sobre tu código actual.
O modificar la función wBrwLine() en source\classes\wbrowse.prg. Está en PRG y no es dificil de modificar
Anotnio, me podrías echar una mano para ver en que parte del código tendría que modificar para no realizar cambios y no empeorarlo.
Un Saludo.
En base a que criterio (valor de un campo, posicion, etc.) quieres colorear una determinada celda ?
Lo que quiero conseguir es colorear una determinada celda según si el valor de dicha celda es igual a uno dado.
Un Saludo.
Muy buenas Antonio, he estado mirando el código pero me gustaría que me dijeras por donde puedo tirar para no modificar código innecesario.
Un Saludo.
#include "FiveWin.ch"
function Main()
local oDlg, oBrw, aValues := { { "One", "Two", "Three" }, { "Four", "Five", "Six" } }
DEFINE DIALOG oDlg TITLE "Colored Cell"
@ 0, 0 LISTBOX oBrw ;
FIELDS aValues[ oBrw:nAt, 1 ], aValues[ oBrw:nAt, 2 ], aValues[ oBrw:nAt, 3 ] ;
OF oDlg
oBrw:SetArray( aValues )
oBrw:nClrPane = { | nCol | If( aValues[ oBrw:nAt, nCol ] == "Five", CLR_HRED, CLR_WHITE ) }
oDlg:oClient = oBrw
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT oDlg:ReSize()
return nil
Muy buenas Antonio, he probado el código que me has proporcionado pero no lo consigo, yo utilizo la FwH v.7.12 y principalmente a la hora de modificar wbrowse.prg las líneas no coinciden con las que me das son siempre 2 líneas menos, no se si es por la version, con este código:
redefine listbox oTbr FIELDS "";
HEADERS "Mes/Día","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31" ID 501 of odlg font oFontTahoma;
on dblclick iif(empty(aId[oTbr:nAt,oTbr:nColAct]) .or. aId[oTbr:nAt,oTbr:nColAct]=0,msgalert("Debe seleccionar un día con un Servicio asignado.",oConfiguracion:Titulo_Aplicacion),(oDlg:end(),m_ServiciosDirDet(,aId[oTbr:nAt,oTbr:nColAct])))
oTbr:SetArray(acDatos)// Lo mete en el browse
oTbr:bline := {|| {acDatos[oTbr:nAt,1],acDatos[oTbr:nAt,2],acDatos[oTbr:nAt,3],acDatos[oTbr:nAt,4],acDatos[oTbr:nAt,5],acDatos[oTbr:nAt,6],acDatos[oTbr:nAt,7],acDatos[oTbr:nAt,8],acDatos[oTbr:nAt,9],acDatos[oTbr:nAt,10],acDatos[oTbr:nAt,11],acDatos[oTbr:nAt,12],acDatos[oTbr:nAt,13],acDatos[oTbr:nAt,14],acDatos[oTbr:nAt,15],acDatos[oTbr:nAt,16],acDatos[oTbr:nAt,17],acDatos[oTbr:nAt,18],acDatos[oTbr:nAt,19],acDatos[oTbr:nAt,20],acDatos[oTbr:nAt,21],acDatos[oTbr:nAt,22],acDatos[oTbr:nAt,23],acDatos[oTbr:nAt,24],acDatos[oTbr:nAt,25],acDatos[oTbr:nAt,26],acDatos[oTbr:nAt,27],acDatos[oTbr:nAt,28],acDatos[oTbr:nAt,29],acDatos[oTbr:nAt,30],acDatos[oTbr:nAt,31],acDatos[oTbr:nAt,32]}}
oTbr:aColSizes:= anTam
oTbr:nClrPane = { | nCol | if( acDatos[ oTbr:nAt, nCol ] = "X", CLR_HRED, CLR_WHITE ) }
oTbr:lCellStyle = .t.
oTbr:lAutoEdit = .f.
oTbr:lAutoSkip = .t.
da error de acceso al array por motivo de la línea:
oTbr:nClrPane = { | nCol | if( acDatos[ oTbr:nAt, nCol ] = "X", CLR_HRED, CLR_WHITE ) }
y si pongo:
oTbr:nClrPane = { | | if( acDatos[ oTbr:nAt, 7 ] = "X", CLR_HRED, CLR_WHITE ) }
me pinta la línea del listbox que tenga en la columna 7 de color rojo.
¿Que puedo hacer?
Un Saludo.
Ya he conseguido hacerlo quitando:
oTbr:lCellStyle = .t.
Pero mi problema es que necesito seleccionar la casilla para hacer referencia a dicha celda, entonces si hago una cosa no puedo hacer otra, ¿que solución me puedes proponer?
Un Saludo.
Si necesitas más prestaciones en el browse tienes que plantearte pasar a un browse más potente, como el TXBrowse ó el TCBrowse que soporta objetos columnas.
Tambien tienes el browse de Manuel Mercado y el de Hernan. Como ves hay varias posibilidades.
La clase TWBrowse está ideada para construir browses sencillos y muy rápidos, pero claro, no ofrece toda la funcionalidad de browses más potentes (y más complicados de usar).
Muy buenas, ante todo gracias Antonio, solo me falta que no me de error al ejecutar el bloque de código nCrlPane, es decir:
este bloque de código da error
oBrw:nClrPane = { | nCol | If( aValues[ oBrw:nAt, nCol ] == "Five", CLR_HRED, CLR_WHITE ) }
con lCellstyle:=.t.
como podría arreglar ese error en el listbox.
Un Saludo.
Que error te da ?
Error de acceso al array.
Un Saludo.