2012-02-06 24 views
5

Sto costruendo un'app che deve visualizzare un modulo particolare sempre in primo piano (questa è una richiesta del cliente), finora sto usando il SetWindowPos funziona con il valore HWND_TOPMOST, e funziona bene, ma quando viene attivata la funzionalità Windows 7 Flip 3D la mia app non rimane in alto.Come rendere un modulo sempre in primo piano anche se è attivato Windows 7 Flip 3D

Windows 7 Scorrimento 3D

enter image description here

è, come il mio modulo può rimanere in cima a tutte le altre finestre, anche se Windows 7 Scorrimento 3D si attiva la domanda?

+3

fare altre si fa senza dubbio finire sul [oldnewthing] (http://blogs.msdn.com/b/oldnewthing /) come esempio di cosa non fare. – Neil

+0

Perché vuoi farlo? Vuoi assicurarti che gli utenti testino il tuo programma di disinstallazione? –

+1

@DavidHeffernan questa è una richiesta del cliente perché l'applicazione visualizza i dati in tempo reale di un sistema industriale che deve rimanere sempre visibile agli utenti. – Salvador

risposta

19

Lo faccio qualche tempo fa usando la funzione DwmSetWindowAttribute modyfing l'attributo DWMWA_FLIP3D_POLICY con il valore diDWMFLIP3D_EXCLUDEABOVE.

Prova questo codice

uses 
    Winapi.DwmApi; 

procedure TForm40.FormCreate(Sender: TObject); 
var 
    pvAttribute: Integer; 
begin 
    pvAttribute:= DWMFLIP3D_EXCLUDEABOVE; 
    if DwmCompositionEnabled then 
    DwmSetWindowAttribute(Handle, DWMWA_FLIP3D_POLICY, @pvAttribute, Sizeof(Integer)); 
end; 

E questo è il risultato

enter image description here

+0

Grazie mille. – Salvador

+3

Raymond Chen ti odierà. EMBarbosa

+0

+1, lavoro fantastico. – NeverHopeless