Code: Select all
# INCLUDE "FiveWin.ch"
# INCLUDE "XBrowse.ch"
//-------------
FUNCTION Main()
//-------------
LOCAL oWnd,aLin:={},i,oBrw
FOR i:=1 TO 6
AAdd(aLin,{i,'Descripción '+Str(i)})
NEXT
DEFINE WINDOW oWnd
//--Definición Objeto TxBrowse
oBrw:=TxBrowse():New(oWnd)
oBrw:SetArray(aLin)
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL
oBrw:aCols[1]:cHeader := 'Cod'
oBrw:aCols[1]:cEditPicture := '@k 99'
oBrw:aCols[1]:bClrEdit := oBrw:bClrStd
oBrw:aCols[1]:bOnPostEdit := {|o,x| aLin[ oBrw:nArrayAt,1] := x }
oBrw:aCols[1]:nEditType := EDIT_GET
oBrw:aCols[1]:bEditValid := {|oGet| Valida(oGet:Value()) } //<========
//--
oBrw:aCols[2]:cHeader := 'Descripción'
oBrw:aCols[2]:bClrEdit := oBrw:bClrStd
oBrw:aCols[2]:bOnPostEdit := {|o,x| aLin[ oBrw:nArrayAt,2] := x }
oBrw:aCols[2]:nEditType := EDIT_GET
//--
oBrw:CreateFromCode()
oWnd:oClient:=oBrw
ACTIVATE WINDOW oWnd
RETURN NIL
//-----------------------------------
STATIC FUNCTION Valida(nVal)
//-----------------------------------
LOCAL lValRet:=.T.
IF nVal>6
MsgAlert('No puede ser mayor que 6')
lValRet:=.f.
ENDIF
RETURN lValRet
Si lo ejecutais y en la columna cod poneis un valor superior a 6 vereeis como el codeblock valid es evaluado 2 veces.
En mi aplicación lo que pretendo es cmprobar la existencia de un codigo en una tabla, y visualizar mensaje en caso de que no exista, o visualizar un dialogo para que seleccione uno de valido. La verdad que llevo dos dias con FW e igual estoy haciendo algo mal.
Cualquier ayuda sera bien venida.
Gracias anticipadas.