Mega Code Archive

 
Categories / Delphi / Forms
 

How to make a Form semi C transparent

Title: How to make a Form semi C transparent TMyForm = class (TForm); TrackBar1: TTrackBar; //.. private FColorKey: TCOLOR; end; const // Use crKey as the transparency color. LWA_COLORKEY = 1; // Use bAlpha to determine the opacity of the layered window.. LWA_ALPHA = 2; WS_EX_LAYERED = $80000; implementation {$R *.DFM} // The SetLayeredWindowAttributes function sets the opacity and transparency // color key of a layered window. // Note : This function is only available with Windows 2000 and XP! function SetLayeredWindowAttributes( // Handle to the layered window. Wnd: hwnd; // Pointer to a COLORREF value that specifies the transparency // color key to be used when composing the layered window crKey: ColorRef; // Alpha value used to describe the opacity of the layered window Alpha: Byte; // Specifies an action to take // LWA_COLORKEY or LWA_ALPHA // This parameter can be one or more of the following values: dwFlags: DWORD): Boolean; stdcall; external 'user32.dll'; procedure TMyForm.TrackBar1Change(Sender: TObject); // Trackbar.Position must run at range 1-255... begin SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); SetLayeredWindowAttributes(Handle, ColorToRGB(FColorKey), TrackBar1.Position, LWA_ALPHA); end; {******************************************************************} { To load the SetLayeredWindowAttributes() function dynamically, use this function:} function MakeWindowTransparent(Wnd: HWND; nAlpha: Integer = 10): Boolean; type TSetLayeredWindowAttributes = function(hwnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: Longint): Longint; stdcall; const // Use crKey as the transparency color. LWA_COLORKEY = 1; // Use bAlpha to determine the opacity of the layered window.. LWA_ALPHA = 2; WS_EX_LAYERED = $80000; var hUser32: HMODULE; SetLayeredWindowAttributes: TSetLayeredWindowAttributes; i: Integer; begin Result := False; // Here we import the function from USER32.DLL hUser32 := GetModuleHandle('USER32.DLL'); if hUser32 0 then begin @SetLayeredWindowAttributes := GetProcAddress(hUser32, 'SetLayeredWindowAttributes'); // If the import did not succeed, make sure your app can handle it! if @SetLayeredWindowAttributes nil then begin // Check the current state of the dialog, and then add the WS_EX_LAYERED attribute SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_LAYERED); // The SetLayeredWindowAttributes function sets the opacity and // transparency color key of a layered window SetLayeredWindowAttributes(Wnd, 0, Trunc((255 / 100) * (100 - nAlpha)), LWA_ALPHA); Result := True; end; end; end;