JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

CombineRgn

- функция WinAPI
Функции WinAPI
Комбинирует два исходных региона в результирующий регион в соответствии с указанным режимом.
Синтаксис
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 ошибка при создании результирующего региона
Пример (JS+)
// Окно с закругленными углами и внутренними вырезами
// сложной формы, перемещаемое мышью

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+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/WinAPI/Function/CombineRgn.htm
© 2024,