Uso de tecla VK_UP / VK_DOWN en xBROWSE

Uso de tecla VK_UP / VK_DOWN en xBROWSE

Postby joseluisysturiz » Tue Nov 04, 2008 10:26 pm

Srs. tengo un xbrowse tipo facturacion, cada vez que llego ultima columna me hace un DBAPPEND, eso esta bien, pero me gustaria que si estando en la primera columna uso VK_UP se borre el registo el blanco y que cuando este moviendome y este en la ultmima fila con datos si doy VK_DOWN, me haga un nuevo DBAPPEND, si el get de la primera fila no tiene valor, es decir esta en edicion y vacio no paso a las otras columnas y alli es que pudiera hacer VK_UP y VK_DPOWN. use este codigo pero no resulto, cualquier ayuda y sugerencia de los guru de xBrowse, sera bienvenida :shock:

oBrw:bKeyDown :={ | nKey | teclas(nKey, oBrw, "movinv") } // VALIDO TECLAS PRESIONADA SOBRE REGISTROS


FUNCTION teclas(nKey, oBrw, cAlias) // VALIDA TECLAS SOBRE xBRW
local n=1
DO CASE
CASE nKey == VK_DELETE // BORRAR REGISTRO
IF MsgNoYes("Desea borrar este registro.?"," ATENCION")
(cAlias)->( DBDELETE() )
(cAlias)->( DBPACK() )
oBrw:GOBOTTOM()
oBrw:REFRESH()
ENDIF

CASE nKey == VK_UP // FLECHA ARRIBA
IF n <> 0 //EMPTY( (cAlias)->mvi_codpro )
(cAlias)->( DBDELETE() )
(cAlias)->( DBPACK() )
oBrw:GOBOTTOM()
oBrw:REFRESH()
ENDIF

ENDCASE
RETURN NIL // FIN VALIDA TECLAS SOBRE EL xBROWSE
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby Daniel Garcia-Gil » Tue Nov 04, 2008 11:24 pm

una cosa es la tecla que presionas durante la navegacion del xbrowse y otra mientras estas en estado de edicion de una celda...
no soy guro del xbrowse pero me parece una clase muy interesante
cambia y agrega esto a ver si te sirve...
claro es importante que estes en estado de edicion para que funcione, no lo he probado pero teoricamente deberia funcionar
Code: Select all  Expand view

oBrw:bKeyDown                 :={ | nKey | teclas(nKey, oBrw, "movinv") }

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


procedure teclas(nKey, oBrw, cAlias)
   if nKey == VK_DELETE
      IF MsgNoYes("Desea borrar este registro.?"," ATENCION")
         (cAlias)->( DBDELETE() )
         (cAlias)->( DBPACK() )
         oBrw:GOBOTTOM()
         oBrw:REFRESH()
      endif
   endif
return

FUNCTION Valida( o, oBrw )
local lRet := .t.

DO CASE
   CASE o:nLastKey == VK_UP // FLECHA ARRIBA
      IF o:Value() == space( 20 )  //CAMBIA ESTE VALOR SEGUN VALIDACION
         ( oBrw:cAlias )->( DBDELETE() )
         ( oBrw:cAlias )->( DBPACK() )
         oBrw:GOBOTTOM()
         oBrw:REFRESH()
      ENDIF

   CASE o:nLastKey == VK_DOWN // FLECHA ARRIBA
      IF o:Value() == space( 20 ) //CAMBIA ESTE VALOR SEGUN VALIDACION
         lRet := .f.
      ENDIF


ENDCASE

RETURN lRet
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby joseluisysturiz » Wed Nov 05, 2008 12:14 am

mcfox wrote:una cosa es la tecla que presionas durante la navegacion del xbrowse y otra mientras estas en estado de edicion de una celda...
no soy guro del xbrowse pero me parece una clase muy interesante
cambia y agrega esto a ver si te sirve...
claro es importante que estes en estado de edicion para que funcione, no lo he probado pero teoricamente deberia funcionar
Code: Select all  Expand view

oBrw:bKeyDown                 :={ | nKey | teclas(nKey, oBrw, "movinv") }

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


procedure teclas(nKey, oBrw, cAlias)
   if nKey == VK_DELETE
      IF MsgNoYes("Desea borrar este registro.?"," ATENCION")
         (cAlias)->( DBDELETE() )
         (cAlias)->( DBPACK() )
         oBrw:GOBOTTOM()
         oBrw:REFRESH()
      endif
   endif
return

FUNCTION Valida( o, oBrw )
local lRet := .t.

DO CASE
   CASE o:nLastKey == VK_UP // FLECHA ARRIBA
      IF o:Value() == space( 20 )  //CAMBIA ESTE VALOR SEGUN VALIDACION
         ( oBrw:cAlias )->( DBDELETE() )
         ( oBrw:cAlias )->( DBPACK() )
         oBrw:GOBOTTOM()
         oBrw:REFRESH()
      ENDIF

   CASE o:nLastKey == VK_DOWN // FLECHA ARRIBA
      IF o:Value() == space( 20 ) //CAMBIA ESTE VALOR SEGUN VALIDACION
         lRet := .f.
      ENDIF


ENDCASE

RETURN lRet

Amigo, sabia que ud responderia, lo del guru es solo un decir.... voy probar lo que me enviastes y te aviso como me fue, una ves mas gracias, saludos...como esta esa bella isla...y sus preciosas mujeres...? :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Uso de tecla VK_UP / VK_DOWN en xBROWSE

Postby FranciscoA » Wed Nov 05, 2008 5:29 pm

joseluisysturiz wrote:Srs. tengo un xbrowse tipo facturacion, cada vez que llego ultima columna me hace un DBAPPEND, eso esta bien, pero me gustaria que si estando en la primera columna uso VK_UP se borre el registo el blanco y que cuando este moviendome y este en la ultmima fila con datos si doy VK_DOWN, me haga un nuevo DBAPPEND, si el get de la primera fila no tiene valor, es decir esta en edicion y vacio no paso a las otras columnas y alli es que pudiera hacer VK_UP y VK_DPOWN.


José Luis:

La manera en que yo lo hago, y trabaja precisamente como tú explicas, con la diferencia que uso ESCAPE, es la siguiente:


oBrw:bPastEof = {|| if( lCtaOK(oBrw) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber) ,;
(Dbappend(), oBrw:GoLeftMost(), oBrw:Refresh(), oBrw:aCols[ 1 ]:Edit() ),) } //agrega registro y queda en edicion.


//COLUMNA 1
oCol = oBrw:AddCol()
oCol:bStrData = { || (cAlias)->cta }
oCol:cHeader = "CTA"
oCol:nEditType = EDIT_GET
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
If( nKey == VK_RETURN, (cAlias)->Cta := xVal, ) ,;
If( nKey == VK_ESCAPE .and. Empty((cAlias)->Cta), ( (cAlias)->(dbDelete()),(cAlias)->(__dbPack()),(cAlias)->(dbGoBottom()),oBrw:Refresh() ), ) }


//ULTIMA COLUMNA
oCol = oBrw:AddCol()
oCol:bStrData = { || (cAlias)->CONCEPTO }
oCol:cHeader = "CONCEPTO"
oCol:nEditType = EDIT_GET
//Es la ultima columna, agrega nuevo registro en blanco y se va a primer columna,
//solo si la cta y/o valores están OK
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, (cAlias)->CONCEPTO := xVal ,) ,;
if( !lCtaOK(oBrw),(oBrw:GoLeftMost(), oBrw:Refresh()),;
if ( (cAlias)->(Recno())==(cAlias)->(Reccount()) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber), (DbAppend(), oBrw:GoLeftMost(), oBrw:Refresh()),) ) }


Prueba a ajustarlo a tu código.

Saludos.

Francisco.
User avatar
FranciscoA
 
Posts: 2158
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 47 guests