Page 1 of 1

Ayuda: Estoy empezando a usar xBrowse

Posted: Fri Sep 19, 2008 6:20 pm
by FranciscoA
Amigos del foro: Estoy por decidirme a utilizar xBrowse y en mis primeras pruebas he logrado algunos avances. Puedo hacerlo en codigo xBase, pero, deseo llevar a cabo la creacion utilizando FOR...NEXT. (quiero editar una DBF con _ (45) creando el browse de manera automatica). Como dije, he logrado algún avance, pero estoy "pegado" en lo que corresponde a bEditValid y cEditPicture. Estos no me trabajan. Estoy utilizando el modo lFastEdit y deseo validar _ y en los numericos que el get aparezca con el picture "999,999,999.99".

Pueden ayudarme con un pequeño ejemplo funcional?
He probado todos los ejemplos que he visto en el foro, pero no lo consigo:

Una de las validaciones es que aunque se haya entrado el valor y se oprime tecla scape que no cambie el valor (lo hace indistintamente)

Aquí está el código: (FWH 7.12)

//-------------------------------
Function MiXBrow(oRecta,oBar)
local oChild, cAlias, oBrw, oCol
local n:=0

DBUSEAREA(.T.,,"WMDATA",cAlias:=cGetNewAlias("WMDAT"),.t.)

dbSelectArea(cAlias)

DEFINE WINDOW oChild MDICHILD OF oWnd TITLE "FICHERO: " + cAlias ;
FROM 0, oRecta:nWidth+1 TO oWnd:nHeight-140, oWnd:nWidth-4 PIXEL ;
COLOR nRGB(247, 243, 232), nRGB(228, 213, 184) //CREMITA

oBrw := TXBrowse():New( oChild )
oBrw:cAlias := cAlias //nunca omitir esto


//ESTILOS DE LINEAS
oBrw:nColDividerStyle := LINESTYLE_INSET
oBrw:nRowDividerStyle := LINESTYLE_INSET

//HEADERS Y FOOTERS
oBrw:nHeaderHeight := 30 //Altura cabeceras de col
oBrw:lFooter := .t. //Que tendrá footer
oBrw:nFooterLines := 1 //Lineas del footer
oBrw:nFooterHeight := 24 //Altura del Footer


//COLORES (texto y fondo del texto)
oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB(229,0,0) } } // VERDECITO
oBrw:bClrFooter := {|| { nRGB(255,248,220), nRGB(157,138, 0) } } // VERDECITO
oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
oBrw:bClrSel := {|| { nRGB(255,255,255), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco


oBrw:SetRDD()


//BARRA SELECTORA
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL //solo ilumina la celda actual


//EDICION
oBrw:lFastEdit := .t. //.t.= edicion rapida, salta a sig col
For n:=1 to len( oBrw:aCols )
oCol:=oBrw:aCols[n]
oCol:nEditType := 1 // SETGET Sets or Gets de Edit Mode: 0=none, 1=Get, 2=Listbox, 3=block, 4=Get+Listbox, 5 = Get+block
oCol:bOnPostEdit := {|oCol, uVal, nKey| if(nKey != VK_ESCAPE, FEditar(oCol,uVal,nKey,oBrw),) }
** oCol:bEditValid := {| o,u,n | FValidar( o,u,n ) } //Este
** oCol:cEditPicture := MyPicture( oCol,oBrw ) //Este
Next


oBrw:CreateFromCode()

oChild:oClient := oBrw

ACTIVATE WINDOW oChild ON INIT oBrw:SetFocus()
RETURN NIL


//----------------------------------------
Function FEditar(oCol,uVal,nLastKey,oBrw)
local nValorAnt := Eval( oCol:bEditValue )

IF nLastKey == VK_ESCAPE //no evalua, deja pasar, siempre reemplaza
return nil
endif


If nLastKey == VK_RETURN //.Or. nKey = VK_UP .Or. nKey = VK_DOWN .Or. nKey = VK_LEFT .Or. nKey = VK_RIGHT
if uVal <> nValorAnt //Si se modifico valor en columna actual...
If (oBrw:cAlias)->(PudoBloq(.f.))
FieldPut( oCol:nCreationOrder, TipoDato(@uVal,oBrw,oCol) )
(oBrw:cAlias)->( DbUnLock() )
EndIf
endif
EndIf
Return nil

//-------------------------
Function TipoDato(uVal,oBrw,oCol)
local uValor := uVal
if ValType( (oBrw:cAlias)->(FieldGet(oCol:nCreationOrder)) ) =="N"
uValor := Val(uVal)
endif
return uValor

Posted: Fri Sep 19, 2008 8:34 pm
by Antonio Linares
Francisco,

Un ejemplo de bEditValid:

Code: Select all

   oBrw:aCols[ 1 ]:bEditValid   := { | oGet, oCol | Valida( oGet, oCol ) }

...
STATIC FUNCTION Valida( oGet, oCol )

   local nVal := 0

   if oGet:Value() > 6
      MsgAlert( "Must be lower than 7" )
      if MsgGet( "New value", "Enter number between 1 and 6", @nVal )
         if nVal > 0 .and. nVal < 7
            oGet:VarPut( nVal )
            oCol:PostEdit()
            return .T.
          endif
      endif
      return .F.
    endif

return .T.

Posted: Fri Sep 19, 2008 8:36 pm
by Antonio Linares
Un ejemplo de cEditPicture:

oBrw:aCols[1]:cEditPicture := "@K !!!!!!!!!!"

Revisa el código fuente de fwh\samples\testXbrw.prg

Posted: Sat Sep 20, 2008 2:08 am
by FranciscoA
Antonio, gracias por contestarme. No funciona.
La idea es trabajar con el get por defecto del txbrowse.

Lo que no he podido conseguir es que despues de haber introducido un valor en x columna, si se pulsa Escape que no lo valide. (siempre graba el valor introducido aunque se pulse escape)

Y lo otro es el picture en _ numéricos.
¿Es posible que en la version 7.12 no se pueda hacer esto?
Gracias nuevamente.

Saludos.

Francisco.

Posted: Sat Sep 20, 2008 9:07 am
by Antonio Linares
Francisco,

Si, posiblemente se deba a la versión que estas usando.

Se han hecho _ en TXbrowse. De hecho ese GET que usamos en la validación, lo proporciona el objeto XBrowse.

Posted: Sun Sep 21, 2008 12:47 am
by FranciscoA
Antonio Linares wrote:Francisco,

Si, posiblemente se deba a la versión que estas usando.

Se han hecho _ en TXbrowse. De hecho ese GET que usamos en la validación, lo proporciona el objeto XBrowse.
Antonio, efectivamente es la version. Modifiqué la clase y asunto concluido. Sigo con otras mejoras.

Saludos.

Francisco.