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.
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ó. –