7

Come posso attivare l'effetto vetro sulle mie applicazioni console. Sto usando Windows 7 e Delphi 2010.Come attivare un effetto vetro (Windows Vista/7) in un'applicazione console usando Delphi

Ho trovato l'applicazione this quindi dovrebbe essere possibile.

+1

La finestra della console è una risorsa condivisa. Non appartiene al tuo programma. Non apportare modifiche globali a una finestra che non ti appartiene. Se i tuoi clienti vogliono che le loro finestre di console siano fantasiose, possono installare il programma a cui sei collegato. –

risposta

15

Un paio di settimane fa ho pubblicato this article sul mio blog.

La chiave utilizza le funzioni e DwmEnableBlurBehindWindow.

La funzione GetConsoleWindow recupera l'handle di finestra utilizzato dalla console associata al processo chiamante.

La funzione DwmEnableBlurBehindWindow attiva l'effetto sfocatura (vetro) sulla maniglia della finestra fornita.

program ConsoleGlassDelphi; 

{$APPTYPE CONSOLE} 

    uses 
    Windows, 
    SysUtils; 

type 
    DWM_BLURBEHIND = record 
    dwFlags     : DWORD; 
    fEnable     : BOOL; 
    hRgnBlur    : HRGN; 
    fTransitionOnMaximized : BOOL; 
    end; 

function DwmEnableBlurBehindWindow(hWnd : HWND; const pBlurBehind : DWM_BLURBEHIND) : HRESULT; stdcall; external 'dwmapi.dll' name 'DwmEnableBlurBehindWindow';//function to enable the glass effect 
function GetConsoleWindow: HWND; stdcall; external kernel32 name 'GetConsoleWindow'; //get the handle of the console window 

function DWM_EnableBlurBehind(hwnd : HWND; AEnable: Boolean; hRgnBlur : HRGN = 0; ATransitionOnMaximized: Boolean = False; AFlags: Cardinal = 1): HRESULT; 
var 
    pBlurBehind : DWM_BLURBEHIND; 
begin 
    pBlurBehind.dwFlags:=AFlags; 
    pBlurBehind.fEnable:=AEnable; 
    pBlurBehind.hRgnBlur:=hRgnBlur; 
    pBlurBehind.fTransitionOnMaximized:=ATransitionOnMaximized; 
    Result:=DwmEnableBlurBehindWindow(hwnd, pBlurBehind); 
end; 

begin 
    try 
    DWM_EnableBlurBehind(GetConsoleWindow(), True); 
    Writeln('See my glass effect'); 
    Writeln('Go Delphi Go'); 
    Readln; 
    except 
    on E:Exception do 
     Writeln(E.Classname, ': ', E.Message); 
    end; 
end. 

Questo è solo un esempio di base; è necessario verificare la versione del sistema operativo Windows per evitare problemi.

Screenshot

+0

Questa dose non funziona bene se la "finestra Colore e aspetto" è impostata su gelo ... testo bianco su sfondo bianco –