Ayuda: Estoy empezando a usar xBrowse

Ayuda: Estoy empezando a usar xBrowse

Postby FranciscoA » Fri Sep 19, 2008 6:20 pm

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 muchos campos (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 los campos 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
FranciscoA
 
Posts: 2114
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby Antonio Linares » Fri Sep 19, 2008 8:34 pm

Francisco,

Un ejemplo de bEditValid:
Code: Select all  Expand view
   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: 41406
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Fri Sep 19, 2008 8:36 pm

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

Postby FranciscoA » Sat Sep 20, 2008 2:08 am

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 los campos numéricos.
¿Es posible que en la version 7.12 no se pueda hacer esto?
Gracias nuevamente.

Saludos.

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

Postby Antonio Linares » Sat Sep 20, 2008 9:07 am

Francisco,

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

Se han hecho muchísimos cambios 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
Antonio Linares
Site Admin
 
Posts: 41406
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby FranciscoA » Sun Sep 21, 2008 12:47 am

Antonio Linares wrote:Francisco,

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

Se han hecho muchísimos cambios 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.
User avatar
FranciscoA
 
Posts: 2114
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 44 guests