Sunday, 16 November 2008

Crear formularios transparentes en Delphi (Opacidad variable)

Para crear un formulario transparente, con un canal Alpha variable, tenemos que ir a buscar la API de windows y utilizar el procedimiento SetLayeredWindowAttributes de user32.dll. El resultado final es el siguiente:





implementation

{$R *.dfm}

{-------------------------------------------------------
ALPHA_VALUE determina el nivel de transparencia.
0 = transparencia total,
255 = opaco
--------------------------------------------------------}
const
ALPHA_VALUE = 128;
WS_EX_LAYERED = $00080000;
LWA_ALPHA = 2;

function SetLayeredWindowAttributes(Handle: HWND;
crKey: TColor;
bAlpha: Byte;
dwFlags: DWORD): Boolean;
stdcall; external 'user32.dll';

procedure TForm1.FormCreate(Sender: TObject);
var
OSVersion: _OSVERSIONINFO;
oldStyle: DWORD;
begin
GetVersionEx(OSVersion);
if OSVersion.dwMajorVersion >= 5 then { Win2000 o superior }
begin
oldStyle := GetWindowLong(Self.Handle, GWL_EXSTYLE);
SetWindowLong(Self.Handle, GWL_EXSTYLE, oldStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Self.Handle, clBlack, ALPHA_VALUE, LWA_ALPHA);
RedrawWindow(Self.Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
end;
end;


Estos métodos solo son validos para versiones de windows superior a windows 98/ME. Por eso se hace una comprobación de la versión del sistema operativo.

0 comments:

Post a Comment