No s茅 que Browse usas, si el xBrowse u otro. Yo lo hago as铆 con xBrowse
oCol = oBrw:AddCol()
oCol:bEditValue := { |x| If( x == nil, (cAlias1)->codigo, (cAlias1)->codigo := x ) }
oCol:nEditType := EDIT_GET_BUTTON
oCol:cHEADER := "CODIGO "
oCol:addResource( "BUSCAR1" )
oCol:lBtnTransparent := .t.
oCol:nBtnBmp := 1
oCol:bEditValid := {|o| if ( Empty(o:value()) , .f., .t.) }
oCol:bEditBlock := {|nRow, nCol, oCol| oCol:Value := BuscaUnServicio() }
oCol:bOnPostEdit := { | oCol, xVal, nKey | If( RecCount() == 0,( DbAppend(), oBrw:Refresh() ),) ,;
If( nKey == VK_RETURN, If(BServicio(oBrw,xVal),oBrw:Refresh(),oBrw:GoleftMost()),),;
If( nKey == VK_ESCAPE .and. Val((cAlias1)->codigo)=0,( (cAlias1)->(dbDelete()),;
(cAlias1)->(__dbPack()),(cAlias1)->(dbGoBottom()),oBrw:Refresh() ), ) }
la funci贸n BuscaUnservicio() es para el bmp que pongo en la celda, y la Bservicio() es para validar el c贸digo
*------------------------------------------------------------------------------
Function BServicio(oBrw,xVal)
*------------------------------------------------------------------------------
Local cServicio := Val(xVal)
cServicio := PADL(cServicio,4,"0")
SERV->(dbSeek(cServicio))
If SERV->(Found())
(oBrw:cAlias)->codigo := cServicio
(oBrw:cAlias)->concepto := SERV->servicio
Else
cServicio := BuscaUnServicio()
(oBrw:cAlias)->codigo := cServicio
(oBrw:cAlias)->concepto := SERV->servicio
EndIf
(oBrw:cAlias)->fecha := aCabAlb[ 2]
(oBrw:cAlias)->cliente := aCabAlb[ 3]
(oBrw:cAlias)->agente := aCabAlb[18]
(oBrw:cAlias)->comision := CLIE->comision
(oBrw:cAlias)->tipcli := aCabAlb[23]
oBrw:Refresh()
Return .t.
* ------------------------------------------------------------------
FUNCTION BUSCAUNSERVICIO()
* ------------------------------------------------------------------
Local oDlgBus
Local oLbxServi
Local cAlServ
Local nSele := SELECT()
Local oDServi, xCodigo := Space(4)
dbSelectArea("SERV")
SERV->(dbGotop())
cAlServ := ALIAS()
DATABASE oDServi
DEFINE DIALOG oDlgBus RESOURCE "DLGBUSCAR" COLOR RGB(0,0,0),RGB(153,204,153)
REDEFINE LISTBOX oLbxServi ;
FIELDS oDServi:numero, oDServi:servicio;
HEADERS "NUMERO","SERVICIO";
ALIAS cAlServ;
COLOR CLR_BLACK, RGB(220,220,220) ;
ID 2001;
UPDATE ;
OF oDlgBus
oDlgbus:SetControl( oLbxServi )
oDlgBus:bGotFocus := { || oLbxServi:Refresh() }
oLbxServi:bSkip = { | nRecs | oDServi:Skipper( nRecs ) }
oLbxServi:lCellStyle = .F.
REDEFINE BUTTONBMP ID 120 OF oDlgBus BITMAP "ACEPTAR" TEXTRIGHT ;
ACTION xCodigo:= oDServi:numero,;
oDlgBus:End(),dbSelectArea(nSele)
REDEFINE BUTTONBMP ID 121 OF oDlgBus BITMAP "CANCELAR" TEXTRIGHT ;
ACTION xCodigo := Space(4),;
oDlgBus:End(),dbSelectArea(nSele)
ACTIVATE DIALOG oDlgBus CENTERED
SysRefresh()
return( xCodigo )
Espero que te sirva