jueves, 20 de junio de 2019

Desplazarse sobre un Grid

Como desplazar en Grid


Tuve la oportunidad de ver la problemática en un foro de como desplazarnos en un grid con Visual Foxpro pero que no fuera como presionando el boton del grid como tal.

La persona quiere que cuando coloque el Mouse sobre el objeto este comience a subir o bajar sin tener que dar click para que avance o retroceda.

Esto me llamó la atención y comencé averiguar como poder hacerlo.

Púes bien acá les traigo la manera de como realizar estos desplazamiento sin necesidad
de estar dando click a cada momento.

El usuario lo único que debe hacer es posesionarse sobre la imagen que elija y el cursor comenzará a desplazarse de manera automática al siguiente registro.

Si el usuario no desea que los registros sigan avanzando tan solamente deberá quitar el mouse sobre la imagen seleccionada y automáticamente se detendrá el avance.

Una vez que coloques el mouse sobre la otra imagen el avance continuará a partir del 
último registro en la cual quedó.

Pasos a seguir :

En el evento Load de tu formulario debes colocar lo siguiente:

Set Talk Off
Set Scor Off
Set Talk Off
Set Safety Off
Set Deleted On
Clear
If !File("DEMO.DBF")
Create Table "DEMO.DBF" Free(codigo Int(4) Autoinc,fecha d(8),concepto c(25),cant N(4),precio N(8,2))
Index On codigo Tag codigo Of demo
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"MATEMATICA I",4,10000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"MATEMATICA II",3,13000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"MATEMATICA III",2,14000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"MATEMATICA IV",5,9000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"MATEMATICA VI",1,19000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"FISICA I",1,19000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"FISICA II",3,19000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"QUIMICA VI",1,19000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"INGLES V",1,19000)
Insert Into demo(fecha,concepto,cant,precio) Values (Date(),"HISTORIA VI",1,19000)
Else
Select "DEMO"
Set Index To demo Order codigo
Go Top
Endif

Como podrás observar acá creamos una tabla free denominada "Demo.dbf" y en el cual colocamos los campos codigo, concepto, cant ,precio. 

Indexamos la table mediante el campo codigo.

Noten que el campo codigo se configuró de manera que se fuese auto-incrementando de manera automática sin necesidad de colocar el campo en el insert. Para poder hacer que el campo se auto-incremente debes declarar la variable de tipo INT(4) y agregar la palabra Autoinc, seguidamente se agregan los demás campos.

Una vez creada la table , insertamos los registros mediante la instrucción insert into. 

Cuando el programa se ejecuta por segunda vez la table DEMO no se creara nuevamente sino que la seleccionamos e indexamos para su ejecución.

En el inicio del programa colocaremos lo siguiente:

thisform.grid1.Column4.Alignment = 3 
thisform.grid1.Column5.Alignment = 1 
select DEMO
go top
thisform.grid1.recordsource="DEMO"

Se crearon  dos(2) imagenes en cual una indica hacia abajo y la otra hacia arriba en cual llamaremos image1 e image2 respectivamente.

En la image1 y el evento Mousemove insertamos el código siguiente :

thisform.grid1.DoScroll(1)
IF !EOF()
   reg=recno()
   GO reg
   wait WINDOW "" TIMEOUT .3
   Thisform.Grid1.SetFocus
endif  

Cuando la persona coloca el Mouse sobre la imagen seleccionada los registro empezarán a avanzar.

El wait window nos retarda unas milesimas de segundos para que su avance no resulte muy rápido al siguiente registro.

Una vez que retires el Mouse sobre el objeto este detendrá el avance.

En la image2 y en el evento Mousemove indicaremos el siguiente paso:

thisform.grid1.DoScroll(0)
IF !BOF()
   skip-1
   reg=recno()
   GO reg
   WAIT WINDOW "" TIMEOUT .3
   Thisform.Grid1.SetFocus
endif   

Como podrán notar en ambos eventos se utiliza el thisform.grid1.DoScroll , pero con la diferencia de que el primero es el que nos permite avanzar el siguiente registro. El thisform-grid1.Doscroll(0) esel que se encarga de retroceder el registro.

Bien como de costumbre les dejo el link de descarga en la parte inferior del Blog.





0 comentarios:

Publicar un comentario