Pregunta

Por diseño, la miniatura de la barra de herramientas de aplicación en Vista no actualiza cuando se minimiza una aplicación, ya que la propia ventana minimizada no está redibujando. Para una aplicación de monitoreo que tengo, sería útil para actualizar la miniatura de la aplicación mientras ésta permanece minimizado. Estoy utilizando Delphi 2009. ¿Puede alguien sugerir una buena solución para esto?

HMcG

¿Fue útil?

Solución

Eso es muy interesante supongo que es posible de alguna manera con la API de Windows, no estoy en una máquina del panorama en el momento pero creo que Reproductor de Windows Media todavía muestra la reproducción de vídeo cuando se minimiza.

supongo que un truco sería para anular el botón de minimizar y mover el formulario fuera de la pantalla, a continuación, detectar la forma de convertirse de nuevo activa y se mueve de nuevo a la antigua ubicación. Esto significaría la forma es fuera de la vista, pero no reduce al mínimo.

Otros consejos

algo en un foro de desarrollo de Microsoft que se ocupa de este tema. La pregunta era sobre una manera de proporcionar una imagen en miniatura personalizada, a la que Microsoft de Leonardo Blanco respondido con esto:

  

Lo hacemos ningún plan [t] para proporcionar un medio para una aplicación para crear una   costumbre representación en miniatura alternativa, pero lo haremos   proporcionar una API de optar por la imagen en miniatura normal   por completo ....

Parece que esos planes podrían haber cambiado mientras tanto, a juzgar por la existencia de MSDN de las funciones DwmSetIconicLivePreviewBitmap y href="http://msdn.microsoft.com/en-us/library/dd389411.aspx" rel="nofollow noreferrer"> DwmSetIconicThumbnail windows 7. En este momento esas entradas en realidad no contiene ninguna explicación, pero sus nombres parecen prometedores.

Alguien señaló que la miniatura para Windows Media Player muestra el vídeo incluso cuando la ventana está minimizada en movimiento. La explicación de Blanco:

  

WMP utiliza un nuevo video de la tubería que se refiere directamente a la   [Desktop Manager Ventana] para lograr una reproducción más fluida   experiencia. Esta tubería se basa en [DirectX] y no lo hace   dependerá de la información visibilidad de la ventana, por lo que la miniatura   puede ser mantenido con vida a pesar de que se minimiza la ventana, como   siempre y cuando la aplicación sigue presentando cuadros. Usted puede notar,   Sin embargo, no es que la interfaz de usuario en todo el vídeo es vivir más   (Esto es difícil de observar debido a que la interfaz de usuario alrededor del vídeo   no suele actualizar). Por un poco más de información sobre este método,   consulte la API DwmSetPresentParameters .

Me temo que no puedo encontrar nada más sobre esto. Documentación para las funciones DWM es escasa.

Dada la naturaleza de su aplicación, tal vez vale la pena considerar un adminículo vivir en la barra lateral de Windows.

No sé si esta solución todavía trabaja en Delphi 2009: CreateParams de anulación de establecer GetDesktopWindow como el WndParent.

He cambiado Application.Title en el pasado para mostrar alguna información en el botón de la barra de tareas. Yo no suponga que esto causa un redibujado del icono?

En Delphi 2007 su formulario principal está en la barra de tareas si se establece

  Application.MainFormOnTaskbar := True;

Para evitar que la actualización entonces usted necesita para impedir que la aplicación reducir al mínimo y en su lugar sólo moverlo a la parte posterior. Puede hacer esto poniendo una TApplicationEvents en la forma y la asignación de un controlador de eventos para el evento OnMinimize y luego llamar a Application.Restore en ese país. Usted tendrá que seguir su propio estado de minimización y asegúrese de ocultar todas las otras formas (si los tiene) y sólo tienen su principal forma visible, pero en el más bajo orden Z cuando se "reduce al mínimo."

No creo que Windows Vista le permite mover las formas fuera de la pantalla, o usted podría hacer eso. Tal vez hay un corte alrededor de eso.

Buena suerte!

ir a su proyecto de código y cambiar Application.MainFormOnTaskbar false: Application.MainFormOnTaskbar: = false;

Saludos, Mauricio

http://sourceforge.net/projects/tcycomponents/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top