Меню сайта
Друзья сайта
Статистика
Наш опрос
Оцените мой сайт

[ Результаты · Архив опросов ]

Всего ответов: 62
Четверг, 2024-05-16, 5:30 PM
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Софт - портал
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование » Delphi » ПРОЗРАЧНОЕ ОКНО (как ето зделать можете посмотреть)
ПРОЗРАЧНОЕ ОКНО
zexelДата: Четверг, 2006-11-09, 2:56 PM | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 41
Репутация: 1
Статус: Offline
ля создания прозрачного окна Вам понадобится:
Форма - 1 штука,
Время - 5 минут,
Желание - неимоверное.
Если всё это у Вас в наличии имеется, то можете смело приступать к выполнению следующих действий:
Первым делом в защищённых объявлениях (после слова protected) объявим две процедуры. Изначально это слово отсутствует, поэтому Вам придётся самим вписать его (можно до слова public):
protected
procedure RebuildWindowRgn;
procedure Resize; override;
Затем в публичных объявлениях (теперь уже в public)размещаем объявление конструктора. Нам его нужно переопределить, поэтому добавляем ключевое слово override:
constructor Create(AOwner:TComponent);override;
В области реализации (после слова implementation) описываем конструктор так:
implementation
{$R *.DFM}
constructor TForm1.Create(AOwner:TComponent);
begin
inherited;
HorzScrollbar.Visible:=false;
VertScrollbar.Visible:=false;
RebuildWindowRgn;
end;
Ресурс формы {$R *.DFM} оставляем без изменений. Слово inherited свидетельствует о том, что используется стандартный обработчик этой процедуры. Мы лишь убрали полосы прокрутки
HorzScrollbar.Visible:=false;
VertScrollbar.Visible:=false;
(скролбары), чтобы они не мешались. И построили регион с помощью процедуры RebuildWindowRgn.
Тело переобъявленной процедуры Resize выглядит так:
procedure TForm1.Resize;
begin
inherited;
RebuildWindowRgn;
end;
Здесь мы всего лишь перестраиваем регион, когда пользователь изменяет размер окна.
И, наконец, описываем процедуру RebuildWindowRgn:
procedure TForm1.RebuildWindowRgn;
var
FullRgn,Rgn:THandle;
ClientX,ClientY,i:integer;
begin
ClientX:=(Width-ClientWidth) div 2;
ClientY:=Height-ClientHeight-ClientX;
FullRgn:=CreateRectRgn(0,0,Width,Height);
Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF);
for i:=0 to ControlCount-1 do
with Controls[i] do begin
Rgn:=CreateRectRgn(ClientX+Left,ClientY+Top,ClientX+Left+Width,ClientY+Top+Height);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_OR);
end;
SetWindowRgn(Handle,FullRgn,true);
end;
Как это сделано?
В переменные ClientX и ClientY мы помещаем относительные координаты клиентской части. Создаём регион для всей формы:
FullRgn:=CreateRectRgn(0,0,Width,Height);
Создаём регион для клиентской части формы и вычитаем его из FullRgn
Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF);
Добавляем в цикле к FullRgn регионы каждого контрольного элемента.
for i:=0 to ControlCount-1 do
with Controls[i] do begin
Rgn:=CreateRectRgn(ClientX+Left,ClientY+Top,ClientX+Left+Width,ClientY+Top+Height);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_OR);
end;
Устанавливаем новый регион окна
SetWindowRgn(Handle,FullRgn,true);
surprised surprised surprised surprised
 
Форум » Программирование » Delphi » ПРОЗРАЧНОЕ ОКНО (как ето зделать можете посмотреть)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024
Создать бесплатный сайт с uCoz