Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прозрачная ФОРМА, но не компоненты. [D6, WinXP]


greenrul ©   (2002-12-03 19:09:00) 

Как сделать нивидымым форму, оставив все control"ы на ней видимыми? Пробовал через регионы (SetWindowRgn), но он либо всю форму, либо ничего.

Можно конечно сложить все control"ы в один регион, и его засобачить в SetWindowRgn, но тогда
1) Нет ли другого, более оптимального способа?
2) Если нет, то как объеденить эти регионы?


ZEE   (2002-12-05 01:16:00) [1]

Вот пример с регионами.

в protectedдобавляем
procedure RebuildWindowRgn;

в OnCreateформы добавляем
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);
// создаем регион для клиентской части формы
// и вычитаем его из 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);
end;


mukha   (2002-12-04 22:54:00) [2]

Отправил пример. Правда только один EXE-файл.Исходники никак не найду.сделано в Д-5, скампилировано без пакетов, вес 15 КБ, заинтересует буду искать исходники.


kronprince   (2002-12-04 20:43:00) [3]

Ты пробовал да не распробовал.

CombineRgn() - и все контролы в один регион :)))


Юрий Зотов   (2002-12-04 19:56:00) [4]

1. Попробуйте повозиться со стилем формы WS_EX_TRANSPARENT (устанавливается в методе CreateParams). Но если и получится, то не для графических контролов.

2. CombineRgn.


greenrul   (2002-12-04 19:12:00) [5]

?


Наверх

Титульная страница Поиск, карта сайта Написать письмо