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

CreatePolygonRgn

- функция WinAPI
Функции WinAPI
Создает многоугольный регион, ограниченный указанными точками.
Синтаксис
function CreatePolygonRgn(
  APoints,
  NPoints,
  FillMode
): Number;

Параметры
Параметр Тип Описание
APoints Array массив точек типа TPoint
NPoints Number количество точек в массиве APoints
FillMode Enum режим заполнения многоугольника (см. ниже)

Параметр FillMode
Значение Описание
ALTERNATE заполнить непересекающиеся области многоугольника
WINDING заполнить все области многоугольника
Возвращаемое значение
Дескриптор созданного региона или 0 (в случае ошибки).
Пример (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/CreatePolygonRgn.htm
© 2024,