FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Uso de tecla VK_UP / VK_DOWN en xBROWSE
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Uso de tecla VK_UP / VK_DOWN en xBROWSE
Posted: 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!
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Uso de tecla VK_UP / VK_DOWN en xBROWSE
Posted: 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
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
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Uso de tecla VK_UP / VK_DOWN en xBROWSE
Posted: 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
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...? :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Uso de tecla VK_UP / VK_DOWN en xBROWSE
Posted: Wed Nov 05, 2008 05: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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion