Ejemplos usando el Api de windows para Visual basic
<Volver> - Anterior - Siguiente
Ejemplos para utilizar el Scroll del mouse en controles
Contenido
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
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
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
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
Colocar Dos DataGrid en el formulario
La referencia a Ado
Código fuente en el formulario
Código fuente en el módulo bas
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.
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...
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
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar