Ejemplos usando el Api de windows para Visual basic

272 - Animar barra de progreso usando SendMessage

<Volver> - Anterior - Siguiente



 

 

Código fuente de ejemplo enviado por Leandro Ascierto que muestra como modificar el estilo de un control Progressbar utilizando la función del Api SetWindowLong con el estilo PBS_MARQUEE, y luego enviando el mensaje PBM_SETMARQUEE mediante la función SendMessage para que la barra de progreso muestre una animación en forma de marquesina, útil para poder mostrar un progreso de carga guando no se sabe el valor inicial y final.

 

 

 

 

 

 

Nota. Este ejemplo funciona perfectamente con los temas clásicos de windows XP : Verde oliva, el plateado y el Azul. Pero con otros temas o aplicaciones que modifican los estilos del sistema , como por ejemplo el conocido Bricopack para usar el tema de Windows Vista, no funciona, y la animación no se visualiza, por lo menos usando esta forma.

No funciona

 

He buscado bastante para poder hacerlo funcionar, y no he encontrado la forma de poder arreglar el problema, y buscando en internet, hay varias páginas en inglés que también comentan este problema.

Realmente es una lástima que no se pueda utilizar el ejemplo por este motivo, aunque se me ocurre una posible solución, que no sería la mejor, pero por lo menos es funcional, y es desactivar el tema de XP. Pero no desactivar el tema a toda la aplicación ( ventana del formularios y el resto de controles), si no solo al Progressbar. Haciendo esto, la barra no tomaría el estilo, pero por lo menos se mostraría el efecto, y mantendría el tema a los demás controles.

Es decir se visualizaría de la siguiente forma :

El tema de vista que no funcionaba se vería

También funciona con el estilo clásico de windows

Otra posible solución que no he probado, es al iniciar el programa, que se compruebe si el tema actual del sistema son los default de XP. si es así, utilizarlo sin hacer la llamada a SetWindowTheme ya que funcionaria correctamente, si no, desactivar el tema al control Progressbar. ( Nota, Creo que para averiguar los temas se usa la función OpenThemeData y algunas otras, pero no lo aseguro, pero hay muchas información en internet sobre las funciones de la librería uxtheme.dll)

 

Ejemplo :

 

Código fuente

 


Relacionados



Buscar en Recursos vb