Semitransparencia sin usar la propiedad alphablend (Windows 2000 y mas)
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure SetTransparentForm(AHandle : THandle; AValue : byte = 0);
procedure FormCreate(Sender: TObject);
private
public
end;
const
WS_EX_LAYERED = $80000;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
type
TSetLayeredWindowAttributes = function (
hwnd : HWND; crKey : TColor; bAlpha : byte; dwFlags : DWORD ): BOOL; stdcall;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SetTransparentForm(AHandle : THandle; AValue : byte = 0);
var
Info: TOSVersionInfo;
SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
begin
Info.dwOSVersionInfoSize := SizeOf(Info);
GetVersionEx(Info);
if (Info.dwPlatformId = VER_PLATFORM_WIN32_NT) and
(Info.dwMajorVersion >= 5) then
begin
SetLayeredWindowAttributes := GetProcAddress(GetModulehandle(user32), 'SetLayeredWindowAttributes');
if Assigned(SetLayeredWindowAttributes) then
begin
SetWindowLong(AHandle, GWL_EXSTYLE, GetWindowLong(AHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(AHandle, 0, AValue, LWA_ALPHA);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetTransparentForm(Handle, 100);
end;
end.