Реализовать средствами 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.
Ключевые слова:
прозрачность, окна
|
|||||||