FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Varias evaluaciones de bEditValid de la clase TxBrwColumn
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Varias evaluaciones de bEditValid de la clase TxBrwColumn
Posted: Thu Mar 02, 2006 04:06 PM
Hola amigos,
estoy utilizando el siguente codigo en un TxBrowse sobre un array
   oBrw:aCols[1]:cHeader      := 'TIP'
   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| ChkTip(oGet,oSayTip)


El "problema" es que bEditValid, es evaluado varias veces, si lo que se evalua no visualiza nada por pantalla tipo (MsgAlert('Tipo no existe')), ni me entero, pero en mi caso que si quiero visualizar el mensaje de error, pos eso que si hay alguna soluci贸n. Si en lugar de hacer un msgAlert, visualizo el error en un oSay del dialogo funciona bien, pero no es lo ideal. Alguna sugerencia. ?
Gracias anticipadas.
Saludos.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Con un ejemplo funcional se entiende mejor
Posted: Fri Mar 03, 2006 02:33 PM
# 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.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Varias evaluaciones de bEditValid de la clase TxBrwColumn
Posted: Fri Mar 03, 2006 06:37 PM
Biel,

El MsgAlert() provoca una p茅rdida de foco que dispara una comprobaci贸n extra del valid. Una soluci贸n es esta:
   oBrw:aCols[1]:bEditValid   := {|oGet| Valida( oGet ) } 
   ...

STATIC FUNCTION Valida( oGet ) 
//----------------------------------- 
    LOCAL lValRet:=.T. 
    local bValid := oGet:bValid
    local nVal := oGet:Value()
    
    oGet:bValid = nil
    
    IF nVal>6 
        MsgAlert('No puede ser mayor que 6') 
        lValRet:=.f. 
    ENDIF 
    
    oGet:bValid = bValid
RETURN lValRet
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Varias evaluaciones de bEditValid de la clase TxBrwColumn
Posted: Tue Mar 07, 2006 09:32 AM

Gracias Antonio, efectivmanete con esta modificaci贸n solo se evalua una vez, pero aunque en este ejemplo todo queda funcionando bien, en el real tengo problemas con el foco(no vuelve al campo editado) y con el valid en si. Ahora ando algo liado, y obtare por visualizar los mensajes en un oSay, y as铆 no hay perdida de foco, y todo parece funcionar bien. Mas adelante, volvere a revisarlo con el msgAlert.

Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/

Continue the discussion