![]() |
TProgressBar cíclico nativo (marquee) (añadida solución 3)
Hola,
Algunas veces seguro que os habéis encontrado con la necesidad de mostrar un proceso que no sabéis cuanto tiempo os va a durar, y sería bonito poder indiciar que el programa esta trabajando, pero el Delphi después de tanto tiempo, aun no soporta la propiedad Marquee en su TProgressBar. Pues aquí os propongo como convertir un TProgressBar nativo del Delphi (Win32) en un TProgressBar con la propiedad marquee, sin tener que usar componentes de terceros, que además la mayoría no son nativos (para gente obsesionada en que los programas deben usar los temas de Windows (como yo) seguro que les gustará). Preparativos Incluir la unit CommCtrl al uses, para incluir las constantes: PBS_MARQUEE y PBM_SETMARQUEE. Si no tenéis estas constantes definidas en vuestro Delphi, aquí os pongo su valor: NOTA: Debeis tener en cuenta, que esta propiedad solo esta disponible para sistemas operativos Windows XP y superiores. Solución 1 - Asignar la propiedad marquee a cualquier TProgressBar Al crear el formulario le asignamos la propiedad marquee al TProgressBar que hay que convertir:
Cuando esta en movimiento, este parpadea un poco, pero es facil solucionarlo poniendo la propiedad DoubleBuffered a True. Como activar/detener el ProgressBar: Activar:
Detener:
Parametros: [1] El Handle del TProgressBar que vamos a modificar [2] La propiedad que vamos a modificar del TProgressBar [3] Lo que vamos a hacer, si activarlo o desactivarlo (true = activar, false = desactivar) [4] La velocidad de movimiento de la barra de progreso. Ejemplo final: Un par de botones, un SpinEdit y el ProgressBar a modificar.
Solución 2 - Crear un componente derivado del TProgressBar para no tener que ir configurándolo todas las veces Código fuente del nuevo componente:
La segunda versión podría modificarse para soportar también el modo normal del TProgressBar, pero esto ya se lo dejo para quien quiera entretenerse xD Igual que ahora mismo tiene todo los métodos del TProgressBar estándar y no son necesarios. Solución 3 - Nueva! - Ampliar las funciones del TProgressBar usando Class Helpers Esta tercera opción, no es válida para todas las versiones de Delphi, en concreto funciona a partir del Delphi 8 (Delphi 8, BDS 2005, BDS 2006 y D2007). Así pues, esta solución utiliza la extensión del lenguaje de Object Pascal llamada Class Helpers para modificar el TProgressBar estándar. Veamos como implementarla:
La pregunta es, que ganamos respecto a crear un componente derivado del TProgressBar (solución 2) a usar un "helper" para el TProgressBar, pues que la tercera solución lo que hace realmente es "ampliar" el componente TProgressBar, así pues todos los TProgressBar estándar, cuentan ahora con estos 3 nuevos métodos. Personalmente, esta tercera opción es mi favorita :) Saludos, xEsk. |
uooo excelente hoy estaba buscando una cosa parecida, genial
|
Muy buen tutorial y muy útil xEsk. ¡Gracias! ;-)
|
¿¿que es eso de marquee??
|
[b]JXJ[b] [i]¿¿que es eso de marquee??[i]
Es como se refieren a los ProgressBar cícilicos. |
Una pregunta.... esto mismo se podria hacer con Canvas?
Me explico. Tengo que hacer una pantalla de presentacion de informacion en tiempo real, de una maquinaria que tenemos en el almacen, y quisiera hacer un tubo con flujos.... En C# Es bastante facil de hacer, pero estoy haciendo el 'porting' a Delphi, y se me resiste.... En C#, utilizo Graficos, el Pen y Brush, haciendo un offset de las lineas con un Timer, pero parece ser que esto en Delphi, como que no funciona igual.... |
Hola, lo probé con D6 y no funciona.
Como no tengo las constante las definí en el proyecto. Es por la versión o falta algo? |
[/b][/u][/i]jceluce que solucion estas probando?
|
Este ejemplo en D7 no funciona.
|
probé con D7 la solucion 1 y lamentablemente no funciona
|
Sí funciona en D7 pero hay que agregar un componente XPMafifiest :-)
|
Posteo el resultado completo
|
La franja horaria es GMT +2. Ahora son las 13:36:25. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi