Con XBrowse se puede hacer. Os "entresaco" el código que utilizo. Al clickar
con el botón derecho del ratón el registro se vuelve de color amarillo y se activa
un icono a su izquierda. Igualmente el array aSeleccion contiene algunos datos del registro
y el array aSele contiene el número de registro
Saludos,
Manuel
..................
STATIC aSeleccion,aSele
.................
Local oLbx
//
oLbx := TXBrowse():New(oDlg)
oLbx:CreateFromResource(200)
oLbx:nFreeze := 4
oLbx:bClrStd := { || {CLR_BLACK,SelColor2(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ),CLR_WHITE } }
//
oCol := oLbx:AddCol()
oCol:AddResource("LEVELB")
oCol:AddResource("LEVELR")
oCol:bBmpData := { || IIF(ASCAN(aSeleccion,EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)=0,1,2 ) }
oCol:cHeader := "S"
AADD(aCols,1)
//
oCol := oLbx:AddCol()
oCol:bStrData := { || EMPRESAS->Numcliente}
oCol:cHeader := "Núm.")
oCol:oDataFont := oFont1
AADD(aCols,2)
//
oCol := oLbx:AddCol()
oCol:bStrData := { || SUBSTR(EMPRESAS->Nombre,1,35)}
oCol:cHeader := " Nombre o razón social"
oCol:oDataFont := oFont1
AADD(aCols,3)
.....................................
.....................................
//
for nFor := 1 to len(aCols)
oLbx:aCols[ nFor ]:blDClickData := {|| (Empresas(oLbx,"Ver/Modificar datos",.F.,nSerie),oLbx:Refresh()) }
oLbx:aCols[ nFor ]:bRClickData := {|| (ESeleccionar(oLbx),oLbx:refresh(),IIF(LEN(aSeleccion) > 0,oBtn7:enable(),oBtn7:disable()) ) }
oLbx:aCols[ nFor ]:bRClickHeader := {|r,c,f,o| NIL }
next
//
**********************************
STATIC FUNCTION ESELECCIONAR(oLbx)
**********************************
Local nPos
Local nPos2
nPos := AScan(aSeleccion, EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)
nPos2:= AScan(aSele, EMPRESAS->(Recno()))
//
IF nPos # 0 // quita la marca si ya la tiene
ADel(aSeleccion, nPos)
ASize(aSeleccion, Len(aSeleccion)-1)
ELSE
AAdd(aSeleccion, EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre) // pone la marca
ENDIF
//
IF nPos2 # 0 // quita la marca si ya la tiene
ADel(aSele, nPos)
ASize(aSele, Len(aSele)-1)
ELSE
AAdd(aSele, EMPRESAS->(Recno())) // pone la marca
ENDIF
//
RETURN NIL
*************************************
FUNCTION SELCOLOR2( cItem, aSeleccion )
*************************************
local nColor := CLR_WHITE
local nPos
nPos := AScan(aSeleccion, cItem)
//
IF nPos # 0
cItem = aSeleccion [nPos]
nColor = CLR_YELLOW
ENDIF
//
RETURN nColor
Las mismas funciones son válidas para un LISTBOX
REDEFINE LISTBOX oLbx ;
FIELDS IIF(ASCAN(aSeleccion,EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)=0," ",aLevel[ 2 ] ),;
" "+EMPRESAS->NumCliente+" ",;
" "+EMPRESAS->Nombre;
FIELDSIZES 13,40,250;
HEADERS "S"," Núm."," Nombre o Razón Social");
ID 200;
FONT oFont1;
COLOR rgb(0,0,0),rgb(255,234,175);
ON RIGHT CLICK (ESeleccionar(oLbx),oLbx:refresh(),IIF(LEN(aSeleccion) > 0,oBtn7:enable(),oBtn7:disable()) );
ON LEFT DBLCLICK Empresas(oLbx,"Ver/Modificar datos",.F.,nSerie); // Al doble click se editar el registro
OF oDlg
oLbx:nClrText := { || SelColor(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }
oLbx:nClrPane := { || SelColor3(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }
oLbx:nClrForeFocus:= { || SelColor2(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }