2009-06-02 7 views
5

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

HMcG

Respuesta

3

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 anular el botón de minimizar y mover el formulario fuera de la pantalla, luego detectar que la forma vuelve a activarse y moverla de nuevo a la ubicación anterior. Esto significaría que la forma está fuera de la vista pero no minimizada.

+0

en movimiento la forma de la pantalla probablemente trabajar, pero parece un poco de un bodge. No obstante, no se descartan corchetes .............. HMcG – HMcG

+0

Windows Media Player sí logró este truco. A menos, por supuesto, que estén sobrepasando el botón de minimizar y moviendo el formulario fuera de la pantalla. – HMcG

+0

Puse que es un truco, probablemente haya un método adecuado, pero si necesita que funcione y no puede encontrar una solución, no creo que cause ningún problema. – PeteT

0

He cambiado Application.Title en el pasado para mostrar cierta información en el botón de la barra de tareas. Supongo que esto no causa un redibujado del ícono.

+0

No creo que el OP pregunte por el icono en la barra de tareas, pero la miniatura ("mini captura de pantalla") que puede mostrarse en Vista para que sepa qué contiene la ventana antes de cambiar a ella. –

+0

Cambiar la aplicación. El título ya no parece cambiar el título del botón de la barra de tareas. Cambiar el título de la forma principal sí, pero desafortunadamente no vuelve a dibujar el icono (o lo vuelve a dibujar con la misma imagen, quizás). – HMcG

1

No sé si this workaround aún funciona en Delphi 2009: anule CreateParams para establecer GetDesktopWindow como WndParent.

+0

Sí, parece que todavía funciona en D2009 en Vista, y la segunda forma también tiene una miniatura, pero el la miniatura aún no se actualiza cuando la aplicación. está minimizado Sin embargo, un truco útil, y mover la segunda ventana de la pantalla podría darme el efecto que quiero. Por cierto, hacer esto con una ventana modal tiene algunos efectos secundarios "interesantes" ...... – HMcG

+0

¿Este truco debería ser necesario si establece Application.MainFormOnTaskbar: = true? – Vegar

+0

MainFormOnTaskBar se introdujo en Delphi 2007, si no me equivoco, y este truco es mucho antes de ese momento. –

0

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 hacerlo colocando un TApplicationEvents en el formulario y asignando un controlador de eventos al evento OnMinimize y luego llamando al Application.Restore allí. Querrá rastrear su propio estado de minimización y asegurarse de ocultar todos los demás formularios (si los tiene) y solo tendrá su formulario principal visible, pero en el orden Z más bajo cuando esté "minimizado".

No creo que Windows Vista le permita mover formularios fuera de la pantalla, o podría simplemente hacer eso. Tal vez haya un truco en eso.

¡Buena suerte!

2

Encontré something in a Microsoft development forum que trata este tema. La pregunta era sobre una manera de proporcionar una imagen en miniatura personalizada, a la que Microsoft de Leonardo Blanco respondió con esto:

Hacemos ningún plan [t] para proporcionar un medio para una aplicación para crear una representación en miniatura alternativa personalizada , pero vamos a 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 y DwmSetIconicLivePreviewBitmapDwmSetIconicThumbnail para Windows 7. En este momento esas entradas don Realmente contiene explicaciones, pero sus nombres parecen prometedores.

Alguien señaló que la miniatura del Reproductor de Windows Media muestra el video en movimiento incluso cuando la ventana está minimizada.La explicación de Blanco:

WMP utiliza un nuevo video de la tubería que se refiere directamente a la [escritorio del administrador de ventanas] para lograr una experiencia de reproducción más suave . Esta canalización depende de [DirectX] y no depende de la información de visibilidad de la ventana, por lo que la miniatura se puede mantener activa aunque la ventana esté minimizada, como mientras la aplicación continúe enviando fotogramas. Sin embargo, puede notar que , que la interfaz de usuario alrededor del video ya no está en vivo (esto es difícil de observar porque la interfaz de usuario alrededor del video no suele actualizarse). Para obtener 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. La documentación para las funciones de DWM es escasa.

Dada la naturaleza de su aplicación, tal vez vale la pena considerar un gadget para vivir en Windows Sidebar.

+0

Gracias por el enlace. Por el momento, mover el formulario fuera de la pantalla en lugar de minimizar funciona alrededor del problema. Quizás Windows 7 ofrecerá una mejor solución a largo plazo. – HMcG

Cuestiones relacionadas