Ejemplos usando el Api de windows para Visual basic

215 - Usar la rueda del mouse en controles de Visual basic

<Volver> - Anterior - Siguiente



 

 

 

Ejemplos para utilizar el Scroll del mouse en controles

Contenido

 

 

 


Actualizado

Este es un proyecto actualizado de todos los ejemplos de esta página para poder usar Mouse wheel en controles Microsoft flexgrid . Hierarchical flexgrid , Datagrid y controles ScrollBar horizontal y vertical usando un módulo de clase creado por Paul caton

El proyecto que está en el archivo zip tiene 3 formularios para cada uno.

Para poder usar el módulo de clase , se debe crear una instancia de las misma y mediante el método InitMouseWheel , pasarle como parámetro el Hwnd del objeto , por ejemplo

 

 

Descargar módulo de clase

 


Ejemplo 1 - Scroll en Flexgrid

Nota: este código está adaptado de un ejemplo de Leandro Ascierto

Para poder habilitar el Scroll a la grilla, se debe inicializar el hook pasándole como parámetro el Hwnd del control, por ejemplo :

call HookForm (El MSFlexGrid )

Para remover el hook y poder quitar el scroll, mediante la siguiente linea:

call UnHookForm ( El MSFlexGrid )

 

Controles

Agregar al proyecto un módulo bas que tiene la función que intercepta los mensajes de windows para poder capturar el momento en que se utiliza la rueda del mouse sobre el Flexgrid indicado

En el formulario añadir un control Microsoft Flexgrid y un Hierarchical flex

Código fuente en el formulario

Código fuente del módulo bas

 

 


2 - Con un DataGrid

 

Para usarlo con un dataGrid, el ejemplo es exactamente igual que en el caso anterior. La diferencia es que , en el procedimiento WindowProc, si se utiliza la función Api SendMessage para realizar el Scroll en la grilla, en este caso ( no se por qué ) genera un error ( Mirar el código fuente a continuación , para poder usarlo correctamente con la función SendMessage )

La única forma que se me ocurrío, es usando el Método Scroll que poseen los controles DataGrid

Es decir , cuando se intercepta el mensaje que se está moviendo la rueda hacia arriba, ejecutar la siguiente linea de código:

ElFormulario.DataGrid1.Scroll 0, 1

Para mover el scroll hacia abajo:

ElFormulario.DataGrid1.Scroll 0, -1

Lo molesto de esto, con respecto al ejemplo del FlexGRid, es que hay que referenciar al DataGrid desde el módulo, mediante el formulario que lo contiene, si no no se puede utilizar por que no se puede acceder al control en cuestión. Es decir si el Datagrid está en un form1, la linea seria : Form1.Datagrid.Scroll 0, 1

Agregar un DataGrid en un Form1 y agregar la referencia a Microsoft Activex data objects para poder acceder a ADO

Código fuente en el formulario

 

Código fuente en el módulo bas

 

 


Usar el mismo ejemplo pero con SendMessage

Bueno después de investigar un poco di con la solución .

Para que no genere error y se puede usar el api SendMessage para manipular el Scroll, en el siguiente ejemplo se usa la función FindwindowEx para recuperar el Hwnd del Scroll del DataGrid.

Usándolo de esta forma, se puede subclasificar la ventana o formulario, y utilizarlo ( por lo menos en teoría ) con muchos DataGrid del mismo formulario o de otros que tenga el programa, simplemente haciendo la llamada a la función que instala el Hook e indicando el DataGrid para habilitar el scroll, y de esta manera no tener que usar el método scroll del Data Grid, y tampoco el formulario que lo contiene

 

Ejemplo

 

Colocar Dos DataGrid en el formulario

La referencia a Ado

 

Código fuente en el formulario

 

 

Código fuente en el módulo bas

 

 


Ejemplo 3 - Usarlo con un DataGrid, un Microsoft FlexGrid y un Hierarchical Flexgrid

 

Este ejemplo es el rejunte de los otros con algunas pequeñas modificaciones, pero es practicamente igual.

En el zip, hay un poyecto que tiene un Form1 con dos DataGrid y dos FlexGrid.

vista del formulario con los controles

 

Nota: Para cargar los DataGrid, se usa la base de datos biblio.mdb ( por si te da error, verifica la ruta en el Connectionsctring)

Y para iniciar el Scroll llamar a la función Iniciar Scroll y para detenerlo DetenerScroll.

Por ejemplo esto inicia ( Dos DataGrid , un MsFlexGRid y un MsHFlexGrid )

  ' Inicia el Scroll para los dos DataGrid
  IniciarScroll DataGrid1
  IniciarScroll DataGrid2
  
  ' Inicia el Scroll para los FlexGrid
  IniciarScroll MSHFlexGrid1
  IniciarScroll MSFlexGrid1 

 

y para detenerlo, pasar también el control como parámetro :

DetenerScroll MSFlexGrid1
'Etc...

 

Descargar

 


Ejemplo 4 - Ejemplo para usar la rueda del mouse en controles Scrollbar

 

Este otro código fuente, es similar a los anteriores pero para aplicarlos en un control Scrollbar horizontal y un scrollbar vertical.

Colocar en un formulario dos picturebox. El picture2 dentro del picture1, y en el picture1 dos Scrollbar , como se muestra en el siguiente gráfico :

 

El ejemplo carga una imagen en el picture2, y establece los scrollbar, el resultado seria este :

 

Y para poder activar o crear el hook que intercepta la rueda del mouse, se debe inicializar en el formLoad, pasándole como parámetro las dos barras de desplazamiento a la función Hook:

Hook VScroll1
Hook HScroll1

 

Código fuente en el formulario

 

 

Código fuente en un módulo bas

 

 

Nota: para que el scroll funcione, en el momento de usar la rueda, los scrollbar deben tener el foco, por eso , en el Picture2 (el que tiene la imagen cargada ) ... está la siguiente linea :

Private Sub Picture2_GotFocus()
    VScroll1.SetFocus
End Sub  

 

Descargar

 


Enlaces relacionados



Buscar en Recursos vb