2008-11-24 10 views
9

Estoy usando una VCL TProgressBar de Delphi 2009 como una especie de indicador "vacío/completo".Desactivar la animación de la barra de progreso en Vista Aero

En Vista, con el tema Aero habilitado, tiene una animación asociada, lo cual es molesto e inapropiado para un indicador.

¿Hay alguna forma de desactivar esto (NO mediante el ajuste de la configuración del tema del usuario) para evitar la animación en este control?

Para aclarar, quiero algo básicamente idéntico al 'espacio en disco utilizado' en el Explorador de Windows. Sin animación, pero aún con un bonito borde y efectos de sombreado.

Actualización:

entiendo que necesito un "medidor", en lugar de una verdadera barra de progreso. ¿Cómo se puede implementar un medidor temático utilizando el control estándar de la barra de progreso de Windows?

Respuesta

11

Según el Vista UI guidelines for progress bars que no deberían usar un TProgressBar para tales fines en absoluto, se indica:

Utilice barras de progreso solamente para el progreso. Use metros para indicar porcentajes que no están relacionados con el progreso.

Hay una gran cantidad de componentes de terceros (por ejemplo Abakus VCL) que están destinadas a aplicaciones de automatización de proceso y similares, tal vez usted podría utilizar uno de estos controles en su lugar?

+1

Entendido - pero dice: "Metros: Este patrón no es una barra de progreso, pero se implementa utilizando el control de barra de progreso". ¿Cómo puedo implementar tal "Meter" usando el control de la barra de progreso? En cuanto a los componentes Abakus, mi aplicación debería verse como diseñada en los últimos diez años más o menos. – Roddy

+0

No sé cómo implementar el medidor, y no tengo Vista aquí para verificar. ¿Podría ejecutar Spy ++ y echar un vistazo a los indicadores de estilo de Windows que están configurados para esos controles de medidor? Spy ++ viene con MS Visual C++. Busca "freeware de spy ++" si no lo tienes. – mghie

+0

En cuanto a Abakus, te escucho ;-) Si necesitas que el medidor se vea bien en Vista, sería mejor encontrar un estilo para el control común. Simplemente no encuentro nada en Platform SDK ... Consulte http://msdn.microsoft.com/en-us/library/cc656530(VS.85).aspx para obtener el documento disponible. – mghie

0

Eche un vistazo a this forum thread. Es el único enlace prometedor que encontré, y la primera publicación menciona los diferentes estados de la barra de progreso, por lo que cambiar las propiedades Smooth, State y Style probablemente no ayuden.

Si la sugerencia en la última publicación es de hecho la única forma de dibujar la barra de progreso en estilo de contador, entonces su mejor opción es crear una clase descendiente de TProgressBar, anular el manejador WM_PAINT, verificar Vista y temas habilitados , y en ese caso use las funciones en UxTheme para pintar las diferentes partes del control.

9

Puede intentar desactivar los temas para ese control;

SetWindowTheme(ProgressBar.Handle, ' ', ' '); 
+0

+1 porque esta respuesta parece útil, aunque no tengo idea de si funciona o si es la forma correcta deshabilitar intencionalmente el tema en un control común. –

+0

He probado esto y funciona, la función está en la biblioteca UxTheme (http://msdn.microsoft.com/en-us/library/bb759827(VS.85).aspx) –

+0

Sí y no. Desactiva la animación PERO también apaga * todo * la tematización del control, por lo que obtienes un cuadro azul sólido sin borde, sombreado ni ningún otro embellecimiento de UI. Mi objetivo es obtener algo que coincida con los "metros de espacio utilizado" en el explorador. – Roddy

Cuestiones relacionadas