|
Комбинирует два исходных региона в результирующий регион в соответствии с указанным режимом.
Синтаксис
function CombineRgn(
| hRgn3, | hRgn1, | hRgn2, | Mode
| ): Enum;
|
Параметры
|
Параметр
| Тип
| Описание
|
hRgn3
| Number
| дескриптор результирующего региона
|
hRgn1
| Number
| дескриптор первого исходного региона
|
hRgn2
| Number
| дескриптор второго исходного региона
|
Mode
| Enum
| режим комбинирования регионов (см. ниже)
|
|
Параметр Mode
|
Значение
| Описание
|
RGN_AND
| создает новый регион из частей, являющихся общими для исходных регионов
|
RGN_COPY
| создает копию региона hRgn1
|
RGN_DIFF
| создает новый регион из частей региона hRgn1, не являющихся частями hRgn2
|
RGN_OR
| создает новый регион как сумму исходных регионов
|
RGN_XOR
| создает новый регион как сумму исходных регионов, за исключением их общих частей
|
|
Возвращаемое значение
|
Значение
| Описание
|
NULLREGION
| результирующий регион пуст
|
SIMPLEREGION
| результирующий регион включает один прямоугольник
|
COMPLEXREGION
| результирующий регион включает несколько прямоугольников
|
ERROR
| ошибка при создании результирующего региона
|
|
// Окно с закругленными углами и внутренними вырезами // сложной формы, перемещаемое мышью
var clr=0x0070A0.toTColor();
// Форма без заголовка frm=new TForm(); frm.BorderStyle=bsNone; frm.Width =w1=GetSystemMetrics(SM_CXSCREEN)/2; frm.Height=h1=GetSystemMetrics(SM_CYSCREEN)/2; frm.Color=clr;
// Регион Прямоугольник с закругленными углами // по размеру формы rgn1=CreateRoundRectRgn(0,0,w1,h1,40,40);
// Регион Эллипс w2=w1-20; h2=h1-20; rgn2=CreateEllipticRgn(20,20,w2,h2);
// Регион Звезда h2=h2-20; x=x1=(w1-h2)/2; y=y1=(h1-h2)/2+15; pnt_lst=new Array(); for (i=0,n=5,h=h2/2,f=Math.PI*4/n;i<n;i++) pnt_lst[i]=new TPoint(x+h*(1+Math.sin(f*i)),y+h*(1-Math.cos(f*i))); rgn3=CreatePolygonRgn(pnt_lst,n,WINDING);
// Форма в виде прямоугольника с закругленными углами // с эллипсом и звездой CombineRgn(rgn1,rgn1,rgn2,RGN_DIFF); CombineRgn(rgn1,rgn1,rgn3,RGN_OR); SetWindowRgn(frm.Handle,rgn1,true);
DeleteObject(rgn2); DeleteObject(rgn3);
// Панель в виде звезды str=new TPanel(frm); str.Caption="Нажми меня!"; str.Font.color=clWhite; str.Width=str.Height=h2; str.Left=x1; str.Top =y1; str.Color=frm.Color; str.Cursor=crHandPoint; str.OnMouseDown=str_MouseDown; for (i=0;i<n;i++) { pnt_lst[i].x-=x; pnt_lst[i].y-=y; } rgn=CreatePolygonRgn(pnt_lst,n,WINDING); SetWindowRgn(str.Handle,rgn,true);
// Кнопка btn=new TButton(frm); btn.Caption="Закрыть"; btn.Left=frm.ClientWidth -btn.Width -20; btn.Top =frm.ClientHeight-btn.Height-20; btn.Hint="Закрыть окно"; btn.ShowHint=true; btn.OnClick=btn_Click;
frm.ShowModal();
// Получить цвет ярче/темнее function getShiftColor(clr,shift) { var c;
return RGB( ((c=getRValue(clr)+shift)>255) ? 255 : (c<0) ? 0 : c, ((c=getGValue(clr)+shift)>255) ? 255 : (c<0) ? 0 : c, ((c=getBValue(clr)+shift)>255) ? 255 : (c<0) ? 0 : c); }
// Обработчик события OnClick кнопки "Закрыть" function btn_Click(btn) { frm.Close(); }
// Обработчик события OnMouseDown панели str function str_MouseDown(str,Button,Shift,X,Y) { var clr=str.Color,crs=str.Cursor,cpt=str.Caption;
if (Button!=mbLeft) return;
ReleaseCapture(); str.Color=getShiftColor(clr,48); str.Cursor=crDrag; str.Caption="Двигай меня!";
// Войти в процесс перемещения формы мышью frm.Perform(WM_SYSCOMMAND,0xF009,0);
str.Caption=cpt; str.Cursor=crs; str.Color=clr; }
|
Совместимость
Windows API
|
JS+ | Руководство пользователя
|
|
|