FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con xBrowse y ARRAY
Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Problema con xBrowse y ARRAY
Posted: Fri Feb 12, 2010 02:09 AM

Hola a todos:

A ver si alguien me dice como solucionar este problemilla:

Tengo definido un xBrowse mediante ARRAY, que en funcion del valor de la columna 8 del array , debe de pintar un BMP en la 1 columna y pintar la fila de negro o rojo, hasta aqui bien.

El problema viene cuando cambio el valor, ya que no refresca bien el Browse, para que visualize la fila en rojo o negro y que se pueda ver el BMP, tengo que hacer click con el raton sobre los registros o subir y bajar con las teclas del cursor.

NOTA: Cargo los datos en ON INIT.

La declaracion de las columnas en un Browse mediante ARRAY es como la declaro?
La variable ::nRowSel, es la posicion relativa ?

Para refrescar el Browse, uso como siempre, Refresh(), que detalle hay que hacer con xBrowse para que repinte todo bien? o que estoy haciendo mal para que no funcione bien?

Yo siempre he usado ListBox y el Browse de Hernan y funciona perfectamente, el xBrowse es una maravilla pero aun tengo alguna cosilla que no se como funciona todavia, quiero usar xBrowse por su potencia.

Aqui dejo la declaracion del Browse mediante ARRAY y la funcion que carga los datos en el ARRAY.

  REDEFINE XBROWSE oGrid ARRAY aDetNid ID 200 OF oDlg

           oGrid:l2007               := .F.
           oGrid:nMarqueeStyle       := MARQSTYLE_HIGHLROW
           oGrid:nColDividerStyle    := LINESTYLE_BLACK
           oGrid:lColDividerComplete := .T.
           oGrid:bClrSel             := {|| { CLR_BLACK, nRGB( 192,192,192 )}}
           oGrid:bClrSelFocus        := {|| { CLR_WHITE, nRGB( 128,128,255 )}}
           oGrid:nHeaderLines        := 2    // Numero de lineas en la cabeceras
           oGrid:nDataLines          := 1    // Numero de lineas en los detalles
           oGrid:lFooter             := .F.  // Inserta pies en cada columna
           oGrid:nDataLines          := 1    // Lineas de separacion entre lineas del detalles
           oGrid:lHScroll            := .F.  // Barra Horizontal
           oGrid:lVScroll            := .F.  // Barra Ventical

           oGrid:SetArray( aDetNid )


           oGrid:aCols[1]:AddResource("ON")
           oGrid:aCols[1]:AddResource("OFF")
           oGrid:aCols[1]:cHeader       := ""+CRLF+"Est"
           oGrid:aCols[1]:nWidth        := 25
           oGrid:aCols[1]:bBmpData      := {|| IIF( oGrid:aArrayData[ oGrid:nRowSel ][1] == 1,2,1 )}

           oGrid:aCols[2]:cHeader       := ""+CRLF+"Huevo"
           oGrid:aCols[2]:nDataStrAlign := 2 // Alineacion: 1.- derecha 2.- centrado 3.- izquierda
           oGrid:aCols[2]:nHeadStrAlign := 2 // Alineacion: 1.- derecha 2.- centrado 3.- izquierda
           oGrid:aCols[2]:nWidth        := 60
           oGrid:aCols[2]:bLDClickData  := bLDClickData
           oGrid:aCols[2]:bRClickData   := bRClickData
           oGrid:aCols[2]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[3]:cHeader       := "Fecha"+CRLF+"Puesta"
           oGrid:aCols[3]:nDataStrAlign := 2
           oGrid:aCols[3]:nHeadStrAlign := 2
           oGrid:aCols[3]:nWidth        := 80
           oGrid:aCols[3]:bLDClickData  := bLDClickData
           oGrid:aCols[3]:bRClickData   := bRClickData
           oGrid:aCols[3]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[4]:cHeader       := "Fecha Prevista"+CRLF+"Nacimiemto"
           oGrid:aCols[4]:nDataStrAlign := 2
           oGrid:aCols[4]:nHeadStrAlign := 2
           oGrid:aCols[4]:nWidth        := 90
           oGrid:aCols[4]:bLDClickData  := bLDClickData
           oGrid:aCols[4]:bRClickData   := bRClickData
           oGrid:aCols[4]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[5]:cHeader       := "Fecha"+CRLF+"Control"
           oGrid:aCols[5]:nDataStrAlign := 2
           oGrid:aCols[5]:nHeadStrAlign := 2
           oGrid:aCols[5]:nWidth        := 80
           oGrid:aCols[5]:bLDClickData  := bLDClickData
           oGrid:aCols[5]:bRClickData   := bRClickData
           oGrid:aCols[5]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[6]:cHeader       := "Fecha"+CRLF+"Fecundación"
           oGrid:aCols[6]:nDataStrAlign := 2
           oGrid:aCols[6]:nHeadStrAlign := 2
           oGrid:aCols[6]:nWidth        := 80
           oGrid:aCols[6]:bLDClickData  := bLDClickData
           oGrid:aCols[6]:bRClickData   := bRClickData
           oGrid:aCols[6]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[7]:cHeader       := "Fecha"+CRLF+"Nacimiento"
           oGrid:aCols[7]:nDataStrAlign := 2
           oGrid:aCols[7]:nHeadStrAlign := 2
           oGrid:aCols[7]:nWidth        := 80
           oGrid:aCols[7]:bLDClickData  := bLDClickData
           oGrid:aCols[7]:bRClickData   := bRClickData
           oGrid:aCols[7]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

           oGrid:aCols[8]:cHeader       := ""+CRLF+"Estado"
           oGrid:aCols[8]:nDataStrAlign := 3
           oGrid:aCols[8]:nHeadStrAlign := 2
           oGrid:aCols[8]:nWidth        := 250
           oGrid:aCols[8]:bLDClickData  := bLDClickData
           oGrid:aCols[8]:bRClickData   := bRClickData
           oGrid:aCols[8]:bClrStd := {|| { iif( oGrid:aArrayData[ oGrid:nRowSel ][1] == 2, CLR_HRED, CLR_BLACK ), CLR_WHITE } }

Y la funcion que carga los datos:

/------------------------------------------------------------------------------/
STATIC Function PasaTABLA()
/------------------------------------------------------------------------------/

*/ Pasamos los datos de la BD a la tabla aDetNid /*

If ! MiDosBuscar( "NidPar", 1, Nidadas->CodNid )
   Return NIL
End

ASize( aDetNid, 0 )

WHILE NidPar->CodNid == Nidadas->CodNid .AND. ! NidPar->( Eof() )

    AAdd( aDetNid, { IIF( NidPar->Estado == aEstadoH[8], 2, 1 ),; // Control de Huevo Eclosionado
                              NidPar->NHuevo ,;  // Nº Huevo
                              NidPar->FPuest ,;  // Fecha puesta
                              NidPar->FPNaci ,;  // Fecha Prev.Nacimiento
                              NidPar->FContr ,;  // Fecha Control
                              NidPar->FFecun ,;  // Fecha fecundacion
                              NidPar->FNacim ,;  // Fecha nacimiento
                             NidPar->Estado })  // Estado

    NidPar->( DbSkip() )
    SysRefresh()

END

oGrid:Refresh()
oGrid:SetFocus()

Return NIL

Un saludo
JLL

Libreria: FWH/FWHX 8.12 28/December/2008
Harbour: Harbour 1.0.1 Rev 9361 1999-2008
Compilador: Borland C++ 5.5.1 versión 32bits

Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Problema con xBrowse y ARRAY
Posted: Fri Feb 12, 2010 02:40 AM
Saludos...

jll-fwh wrote:La variable ::nRowSel, es la posicion relativa ?

es la posicion de la fila seleccionada tomando en cuenta la cantidad de filas visibles, es decir, si tienes 10 lineas visibles nRowSel nunca sera mayor que 10

prueba usar ::aRow[ nCol ]

oGrid:aRow[ 3 ] te devolvera el valor de la fila seleccionada en la columna 3, independientemente de la cantidad de filas visibles

presumo que pudes tener un error aqui

oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aArrayData[ oGrid:nRowSel ][1] == 1,2,1 )} ya que hablas que depende del valode de la columna 8 y estas usando el valode la columna 1 puedes cambairlo asi:
Code (fw): Select all Collapse
oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aRow[ 8 ] == 1,2,1 )} // es mas sencillo y corto
Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Re: Problema con xBrowse y ARRAY
Posted: Fri Feb 12, 2010 04:29 AM

Hola Daniel:

Efectivamente de este modo funciona a la perfeccion:

oGrid:aCols[1]:bBmpData := {|| IIF( oGrid:aRow[ 8 ] == 1,2,1 )}

Muchas gracias por tu ayuda. Gracias a gente como tu, otros vemos el sol entre los nubarrones.

Gracias por tu tiempo y ayuda.
Un saludo
JLL

Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Posts: 1335
Joined: Fri Jun 13, 2008 11:04 AM
Re: Problema con xBrowse y ARRAY
Posted: Fri Feb 12, 2010 04:45 AM
Otra opción

Code (fw): Select all Collapse
oGrid:aCols[1]:bBmpData   := { || iif( oGrid:aArrayData[oGrid:nArrayAt][8] == 1, 2, 1) }


Saludos
Anser

Continue the discussion