Ayuda: Estoy empezando a usar xBrowse

Post Reply
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Ayuda: Estoy empezando a usar xBrowse

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Un ejemplo de cEditPicture:

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

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

Antonio Linares
www.fivetechsoft.com
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Post 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.
Post Reply