2009-06-02 4 views
5

In base alla progettazione, la miniatura applicazione barra degli strumenti su Vista non aggiorna quando un'applicazione è ridotto al minimo, dal momento che la finestra ridotta in sé non sta ridisegnando. Per un'applicazione di monitoraggio che ho, sarebbe utile aggiornare la miniatura dell'applicazione mentre l'applicazione rimane ridotta a icona. Sto usando Delphi 2009. Qualcuno può suggerire una buona soluzione per questo?Vista applicazione delle miniature

HMcG

risposta

3

Questo è un interessante Credo che sia possibile in qualche modo con l'API di Windows, io non sono su una macchina di vista al momento, ma penso che Windows Media Player mostra ancora il video di gioco quando minimizzato .

suppongo un hack sarebbe quello di ignorare il pulsante di minimizzare e spostare il modulo fuori dallo schermo, quindi rilevare il modulo di diventare di nuovo attivo e in movimento di nuovo alla vecchia posizione. Ciò significherebbe che la forma non è visibile ma non ridotta a icona.

+0

Moving forma fuori dallo schermo probabilmente funzionerà, ma sembra un po 'un bodge. Non è escluso che i corpi siano .............. HMcG – HMcG

+0

Windows Media Player ha effettivamente gestito questo trucco. A meno che, naturalmente, non stiano superando il pulsante minimizza e spostando il modulo dallo schermo. – HMcG

+0

Ho messo che è un hack probabilmente è un metodo corretto ma se ne hai bisogno per funzionare e non riesci a trovare una soluzione, non penso che causerà alcun problema. – PeteT

0

ho cambiato Application.Title in passato per mostrare alcune informazioni nel pulsante della barra delle applicazioni. Non credo che questo causi un ridisegno dell'icona?

+0

Non penso che l'OP chieda l'icona sulla barra delle applicazioni, ma la miniatura ("mini screenshot") che può essere visualizzata in Vista in modo da sapere cosa contiene la finestra prima di passare ad essa. –

+0

La modifica di Application.Title non sembra più modificare la didascalia del pulsante della barra delle applicazioni. Modifica la didascalia principale della forma, ma sfortunatamente non ridisegna l'icona (o la ridisegna con la stessa immagine, forse.) – HMcG

1

Non so se this workaround funziona ancora in Delphi 2009: sostituisci CreateParams per impostare GetDesktopWindow come WndParent.

+0

Sì, sembra ancora funzionare in D2009 in Vista, e il secondo modulo ha anche una miniatura, ma il la miniatura non si aggiorna ancora quando l'app. è ridotto al minimo. Trucco utile comunque, e spostare la seconda finestra fuori dallo schermo potrebbe darmi l'effetto che voglio. BTW, facendo questo con una finestra modale ha alcuni effetti collaterali "interessanti" ...... – HMcG

+0

Se questo trucco è necessario se si imposta Application.MainFormOnTaskbar: = true? – Vegar

+0

MainFormOnTaskBar è stato introdotto in Delphi 2007, se non sbaglio, e questo trucco viene da ben prima di quel momento. –

0

In Delphi 2007 il modulo principale è sulla barra delle applicazioni se si imposta

Application.MainFormOnTaskbar := True; 

Per mantenerlo aggiornando quindi è necessario per evitare che l'applicazione da ridurre al minimo e invece solo spostarlo verso la parte posteriore. È possibile farlo inserendo un TApplicationEvents nel modulo e assegnando un gestore di eventi all'evento OnMinimize e quindi chiamando Application.Restore. Dovrai tracciare il tuo stato di minimizzazione e assicurarti di nascondere tutti gli altri moduli (se li hai) e avere solo la tua forma principale visibile, ma nell'ordine Z più basso quando è "minimizzato".

non credo che Windows Vista consente di spostare le forme fuori dallo schermo, o si può solo farlo. Forse c'è un trucco attorno a questo.

Buona fortuna!

2

ho trovato something in a Microsoft development forum che affronta questo tema. La domanda riguardava un modo per fornire un'immagine in miniatura una consuetudine, a cui Microsoft di Leonardo Blanco ha risposto con questo:

Facciamo nessun piano [t] per fornire un mezzo per un app per creare una rappresentazione miniatura alternativa personalizzato , ma ci sarà fornire un'API di opt-out dell'immagine normale miniature del tutto ....

sembra che tali piani potrebbe avere cambiato nel frattempo, a giudicare dalla presenza in MSDN delle funzioni DwmSetIconicLivePreviewBitmap e DwmSetIconicThumbnail per Windows 7. In questo momento quelle voci don Contiene davvero delle spiegazioni, ma i loro nomi sembrano promettenti.

Qualcuno ha fatto notare che la miniatura per Windows Media Player mostra video in movimento anche quando la finestra è ridotto al minimo.La spiegazione di Blanco:

WMP utilizza una nuova pipeline video che parla direttamente al [Desktop Window Manager] per ottenere un più agevole esperienza di riproduzione . Questa pipeline si basa su [DirectX] e non dipende dalle informazioni sulla visibilità della finestra, quindi la miniatura può essere mantenuta attiva anche se la finestra è ridotta a icona, come finché l'app continua a inviare frame. È possibile notare, tuttavia, che l'interfaccia utente intorno al video non è più attiva (questo è difficile da osservare perché l'interfaccia utente intorno al video non viene aggiornata di solito). Per ulteriori informazioni su questo metodo, vedere l'API DwmSetPresentParameters.

Ho paura di non riuscire a trovare più nulla a riguardo. La documentazione per le funzioni DWM è scarsa.

Data la natura della tua applicazione, forse vale la pena considerare un gadget per vivere sulla barra laterale di Windows.

+0

Grazie per il link. Per il momento, spostare il modulo fuori dallo schermo piuttosto che minimizzare i lavori attorno al problema. Forse Windows 7 offrirà una soluzione migliore a lungo termine. – HMcG