Прозрачность окон Windows

prim.jpg

Реализовать средствами Windows API прозрачность окна.

программа, предназначеннв для задания прозрачности окнам Windows.
-по таймеру идет опрос положения курсора мыши
-по положению курсора мыши определяется окно над которым курсор
-по полученному хендлу применяется новый стиль окна с заданием необходимой прозрачности

program win_s;
uses
  Windows,
  Graphics;
 
var
htimer:integer;
c:TCanvas;
User32: HMODULE;//hModule - дескриптор модуля библиотеки расширения MFC.
SetLayeredWindowAttributes: function (hwnd: LongInt; crKey: byte;
    bAlpha: byte; dwFlags: LongInt): LongInt; stdcall;
//hWnd – это хэндл окна, для которого хотим применить эту функцию.
//crKey – цвет, который мы хотим сделать прозрачным.
//bAlpha – степень прозрачности окна.
//dwFlags может принимать два значения – LWA_COLORKEY и LWA_ALPHA.
 
procedure SetAlpha(hwnd: THandle; Value:Integer);
var
  old: THandle;//THandle - 32-битовое двойное слово.
begin
  if (User32 <> 0) and (Assigned(SetLayeredWindowAttributes))then //Assigned проверяет является ли указатель nil.
    begin
      old := GetWindowLongA(hwnd, GWL_EXSTYLE); // получаем текущий ExСтиль окна
      SetWindowLongA(hwnd, GWL_EXSTYLE, old or WS_EX_LAYERED); //функция для установки требуемого стиля уже существующего окна.
      SetLayeredWindowAttributes(hwnd, 0, value, LWA_ALPHA);//Если мы используем LWA_ALPHA, то цвет прозрачности для нас значения не имеет: мы будем управлять прозрачностью всего окна.
    end;
end;
Procedure ttimer;
var
p:Tpoint;
h:integer;
i:integer;
begin
GetCursorPos(p); // получить текущую позицию курсора.
h:=WindowFromPoint(p);  // получить handle(идентификатор-указатель объекта) окна по позиции курсора
if IsWindow(h) then begin   //Проверим полученный хендл окна
SetAlpha(h, 255); //проверем что окно максимально непрозрачно
sleep(300);        // 300-время задержки в мсек.
for i:=255 downto 190 do begin   //уменьшаем значение прозрачности до 190
SetAlpha(h, i);
sleep(25);
end;
end;
end;
 
begin
 User32 := LoadLibrary('USER32.DLL'); //загрузка библиотеки USER32.DLL
  if User32 <> 0 then
    @SetLayeredWindowAttributes := GetProcAddress(User32, 'SetLayeredWindowAttributes') //GetProcAddress-Считывает адpес экспоpтиpованной библиотечной функции.@-оператор взятия адреса
  else                                                                                  
    SetLayeredWindowAttributes := nil;
c:=Tcanvas.Create;
c.Handle:=GetWindowDC(GetDesktopWindow());//Получаем обработчик(handle) окна рабочего стола.
while true do begin
ttimer;
Sleep(100);
end;
c.Free;
  if User32 <> 0 then
    FreeLibrary(User32);//Делает недействительным User32 и освобождает связанную с ним память.
end.

Ключевые слова: 
прозрачность, окна
ВложениеРазмер
3.rar46.61 кб