Прозрачность окна – миф или реальность? Сегодня я превращу этот миф в программу. Посмотри на рисунок в этой статье и ты увидишь, что моя форма прозрачна. Сквозь окно виден текст проги на Delphi. Это не какой-то эффект фотожопа, это ловкость рук и пара недокументированных API из окон.
Рис 1. Форма
Как всегда, меньше болтовни, а больше дела. Пример работает только под Win2000. Смотри на полный исходник проги и ты всё сам увидишь:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//Описываю недокументированную функцию SetLayeredWindowAttributes
function SetLayeredWindowAttributes(hwnd: longint; crey: byte;
bAlpha: byte; dwFlags: longint): longint; stdcall; external 'USER32.DLL';
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var old: longint;
begin
old:=GetWindowLongA(Handle,GWL_EXSTYLE);
SetWindowLongA(Handle,GWL_EXSTYLE,old or $80000);
SetLayeredWindowAttributes(handle, 0, 150, $2);
end;
end.
Я думаю, что всё понятно по комментариям. Мы рассмотрим тут только самую интересную функцию SetLayeredWindowAttributes. Первый параметр – указатель на окно. Второй мне не известен. Третий – число указывающее на прозрачность и изменяться в пределах от 0 до 255. Я подставил прозрачность равную 150, но если ты захочешь рассчитывать в процентах, то можешь вставить сюда формулу (255 * х) DIV 100, где х – процент прозрачность от 0 до 100. Последний параметр – константа и обязана быть такой.
Всё!!! Абсолютно ничего сложного. Только ловкость рук, а не рукоблудство. Пример прекрасно работает в Windows 2000.
Кстати, есть способ проще:
Установить свойство AlphaBlend у формы в true.
После этого, свойство AlphaBlendValue будет указывать на степень прозрачности.
Но эта возможность появилась, кажется, только в Delphi6.