Delphi - база знаний


Как сделать прозрачное окно родными средствами Windows2000?


Как сделать прозрачное окно родными средствами Windows2000?



В Windows2000 есть для этого ф-я SetLayeredWindowAttributes, вот пример её использования:

unit Win2k;
interface
uses Graphics, Windows;

function SetLayeredWindowAttributes(
hwnd : HWND; // handle to the layered window
crKey : TColor; // specifies the color key
bAlpha : byte; // value for the blend function
dwFlags : DWORD // action
): BOOL; stdcall;

function SetLayeredWindowAttributes; external 'user32.dll';
implementation

end.

program WinLayer;

uses
Windows, SysUtils,  
Win2k in 'Win2k.pas';  

const
WS_EX_LAYERED= $80000;  
LWA_COLORKEY = 1;  
LWA_ALPHA = 2;  

var
Hndl : THandle;  
Transp : Byte;  

begin
Writeln('Windows2000 Layer <- build by AK ->');  
Writeln(' Usage: WINLAYER.EXE [window name] [Transp (0-255)]');  
Writeln(' Example: WINLAYER "Calculator" 200');  
Writeln;  
if ParamCount <> 2 then exit;  
Hndl := FindWindow(nil, PChar(ParamStr(1)));  
Transp := StrToIntDef(ParamStr(2), 128);  
if SetWindowLong(Hndl, GWL_EXSTYLE, GetWindowLong(Hndl, GWL_EXSTYLE) or WS_EX_LAYERED) = 0 then  
Writeln('Error !');  
 
if not SetLayeredWindowAttributes(Hndl, 0, Transp, LWA_ALPHA) then  
// ^^^ степень прозрачности  
// 0 - полная прозрачность  
// 255 - полная непрозрачность  
Writeln('Error !');  
end.

Взято с Исходников.ru



Начало  Назад  Вперед