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
Ayuda: Estoy empezando a usar xBrowse
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Francisco,
Un ejemplo de bEditValid:
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Antonio, efectivamente es la version. Modifiqué la clase y asunto concluido. Sigo con otras mejoras.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.
Saludos.
Francisco.