Con array a mi me funciona como sigue,
adjunto el exe con todo y codigo,
marca y desmarca con doble clik o barra espaciadora espero te de una LUZ
https://app.box.com/s/riv066zwek9qqkgugx8fsaludos.
Code: Select all | Expand
* manejo de bitmaps con xbrowse
* 24-dic-2013
* by. SysCtrl.
#include "fivewin.ch"
#include "xbrowse.ch"
static oBrw
Function Main()
ScChk():New()
return nil
CLASS ScChk
METHOD New()
METHOD Teclas()
ENDCLASS
METHOD New() CLASS ScChk
local oDlg, oFont
local oBtn
local oBrush
local aData
aData := { {.f.,1,"Cesar Cortes Cruz", 1500.00,600.00}, ;
{.f.,2,"Nombre 2", 1600.00,700.00} }
DEFINE BRUSH oBrush COLOR nRGB( 255, 255, 255 )
DEFINE FONT oFont NAME "TAHOMA" SIZE 5,15
DEFINE DIALOG oDlg SIZE 800,600 PIXEL FONT oFont TRANSPARENT BRUSH oBrush
oDlg:cTitle := "Check xbrw"
@ 10,10 XBROWSE oBrw SIZE -10,-70 PIXEL OF oDlg ;
DATASOURCE aData ;
COLUMNS 1, 2, 3, 4, 5 ;
COLSIZES 90, 150,250,90,90 ;
HEADERS "Select", "Clave","Nombre","Ingreso","Egreso" ;
CELL LINES FOOTERS NOBORDER FASTEDIT
oBrw:bKeyDown := {|nKey| ::Teclas( nKey, @oDlg ) }
oBrw:nMarqueeStyle = MARQSTYLE_HIGHLWIN7
oBrw:nDataLines := 2
oBrw:nStretchCol := STRETCHCOL_LAST
oBrw:nHeaderLines := 2
oBrw:nFooterLines := 2
oBrw:nColSel := 1
WITH OBJECT oBrw:Ingreso
:cEditPicture := "$999,999.99"
END
WITH OBJECT oBrw:aCols[1]
:AddBmpFile( "checkon.BMP")
:AddBmpFile( "checkoff.BMP")
//:AddResource("CHKON")
// :AddResource("CHKOFF")
:bBmpData := {|| IF( oBrw:aArrayData[ oBrw:nArrayAt ][1], 1, 2) }
:bStrData := {|| IF( oBrw:aArrayData[ oBrw:nArrayAt ][1], 'Si', 'No') }
:blDClickData := {|o, v| ( oBrw:aArrayData[ oBrw:nArrayAt ][1] := !oBrw:aArrayData[ oBrw:nArrayAt ][1], oBrw:DrawSelect() ) }
END
WITH OBJECT oBrw
:CreateFromCode()
END
@ 250, 150 BUTTONBMP oBtn1 PROMPT "Aceptar" TEXTRIGHT OF oDlg ;
ACTION ( oDlg:end() ) PIXEL SIZE 100, 30 CANCEL CENTER
oDlg:lhelpicon := .F.
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
RETURN NIL
METHOD Teclas( nKey, oDlg, aData ) CLASS ScChk
if nKey = VK_SPACE //marca o desmarca con la barra espaciadora
if oBrw:aArrayData[oBrw:nArrayAt][1]
oBrw:aArrayData[ oBrw:nArrayAt ][1] := .f.
else
oBrw:aArrayData[ oBrw:nArrayAt ][1] := .t.
endif
oBrw:DrawSelect()
ENDIF
RETURN NIL