7

Como puedo activar el efecto de cristal en mis aplicaciones de consola. Estoy utilizando Windows 7 y Delphi 2010.¿Cómo se puede activar un efecto de cristal (Windows Vista/7) en una aplicación de consola utilizando Delphi

encontré this aplicación, de modo que debería ser posible.

+1

La ventana de la consola es un recurso compartido. No pertenece a tu programa. No realice cambios globales en una ventana que no le pertenece. Si sus clientes desean que sus ventanas de consola se vean elegantes, pueden instalar el programa al que se vinculó. –

Respuesta

15

Hace un par de semanas publiqué en mi blog this article.

La clave es usar las funciones GetConsoleWindow y DwmEnableBlurBehindWindow.

La función GetConsoleWindow recupera el identificador de ventana utilizada por la consola asociada con el proceso de llamada.

La función DwmEnableBlurBehindWindow permite que el efecto de desenfoque (vidrio) en el identificador de ventana proporcionado.

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. 

Esto es solo un ejemplo básico; debe verificar la versión del sistema operativo Windows para evitar problemas.

Screenshot

+0

Esta dosis no funciona bien si el "Color de ventana y Aspecto" se ajusta a las heladas ... texto en blanco sobre un fondo blanco –

Cuestiones relacionadas