VR
Virtual Reality On-line   Delphi
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi
Прозрачные окна
:

Прозрачность окна – миф или реальность? Сегодня я превращу этот миф в программу. Посмотри на рисунок в этой статье и ты увидишь, что моя форма прозрачна. Сквозь окно виден текст проги на Delphi. Это не какой-то эффект фотожопа, это ловкость рук и пара недокументированных API из окон.

Logo
Рис 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.

Кстати, есть способ проще:

  1. Установить свойство AlphaBlend у формы в true.
  2. После этого, свойство AlphaBlendValue будет указывать на степень прозрачности.

Но эта возможность появилась, кажется, только в Delphi6.


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©