Делаем окна системы прозрачными

Автор статьи: Беляев Алексндр
Сайт Автора: gidsoft.gorodok.net
E-mail Автора: gidsoft@gorodok.net
Дата публикации: 25.01.2005

 В этой статья я хотелбы рассказать как можно изменять внешний вид системы, и делать его более привлекательным для пользователя. Здесь я расскажу как можно с помощью Delphi написать программу меняющую прозрачность окон в системе. В программе используются только стандартные компоненты для Delphi 7, одним словом Вам ничего не придется качать из интернета. И так начнем.

Для начала создадим новый проект на форму положим:

  • один ListBox
  • шесть кнопок
  • один TrackBar
  • три CheckBoxa 
  • один Edit с итенем AppName

Button1.Caption - добавить, Button2.Caption - Удалить, Button3.Caption - Изменить, Button4.Caption - Поумолчанию, Button5.Caption - OK, Button6.Caption - Применить.

CheckBox1.Caption - Как Тип, CheckBox2.Caption - Как заголовок, CheckBox3.Caption - Применять автоматически 

Теперь нам нужно сделать так, чтобы пользователь мог добавлять свои окн к списку уже имеющихся для этого в обработчике события Button1Click пишем следующее Panel1.Show; (при условии что AppName и Button5 находятся на невидимой Panel1). После Ввода данных, нам их нужно обработать, для этого в обработчике Button5Click пишем:

if ((AppName.Text<>'') and (AppName.Text<>'Windows Name')) then
ListBox1.Items.Add(AppName.Text);
Panel1.Hide;

Теперь, когда введенные данные добавленны нужно сделать так, чтобы пользователь мог их редактировать для этого у нас на форме зарезервированны еще две кнопки

procedure TForm1.Button3Click(Sender: TObject); //Изменит выбранный заголовок
begin
if ListBox1.ItemIndex<0 then
begin
Showmessage('Выберите то, что хотите изменить');
exit;
end;
AppName.Text:=ListBox1.Items.Strings[ListBox1.ItemIndex];
ListBox1.DeleteSelected;
Panel1.Show;
end; 

procedure TForm1.Button2Click(Sender: TObject); //Удалить выбранный заголовок
begin
if ListBox1.ItemIndex<0 then
begin
Showmessage('Выберите то, что хотите удалить');
exit;
end;
ListBox1.DeleteSelected;
end;

Все. На этом с редактированием списка окон закончили, теперь нам нужно сделать так чтобы при выборе окна мы могли изменять его прозрачность. Для этого в обработчике Button6Click пишем следующее

 var
old: longint;
hwin:HWND;
begin
if ListBox1.ItemIndex<0 then
begin
Showmessage('Выберите окно, прозрачность которого вы хотите изменить');
exit;
end;
if CheckBox1.Checked then
begin
hwin:=FindWindow(pchar(ListBox1.Items.Strings[ListBox1.ItemIndex]),nil);
if hwin<>0 then
begin
old:=GetWindowLongA(hwin,2) ;
SetWindowLongA(hwin,GWL_EXSTYLE,old or $80000);
SetLayeredWindowAttributes(hwin, 0, TrackBar1.Position, $2);
end;

 Ну вот почти и все осталось сделать так, чтобы при установленной галочке "Применять автоматически" окно вовремя перемещения ползунка меняло свою прозрачность

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if CheckBox3.Checked then Button6.Click;
end;

Вот и вся программа, если кто че непонял пишите на [email protected] постараюсь ответить.

Открыть весь проект в zip архиве (доступно в офлайн)