unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmManyRgn = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmManyRgn: TfrmManyRgn;

implementation

{$R *.dfm}

procedure TfrmManyRgn.FormCreate(Sender: TObject);
var
  r1, r2, r3, r4, r5, r6, r7: HRGN;
  formRgn: HRGN;
  butRgn: HRGN;
begin
  //Создание регионов
  r1 := CreateRoundRectRgn(100, 0, 700, 400, 40, 40);
  r2 := CreateRectRgn(280, 0, 300, 399);
  r3 := CreateRectRgn(500, 0, 520, 399);
  r4 := CreateEllipticRgn(140, 40, 240, 140);
  r5 := CreateEllipticRgn(0, 300, 200, 500);
  r6 := CreateEllipticRgn(500, 40, 600, 140);
  r7 := CreateEllipticRgn(540, 40, 640, 140);

  //Комбинирование
  //..разрезы в основном регионе
  CombineRgn(r1, r1, r2, RGN_XOR);
  CombineRgn(r1, r1, r3, RGN_XOR);
  //..круглая "дырка" в правой стороне
  CombineRgn(r1, r1, r4, RGN_XOR);
  //..присоединение круга в левой нижней части
  CombineRgn(r1, r1, r5, RGN_OR);
  //..создание "дырки" в форме полумесяца
  CombineRgn(r7, r7, r6, RGN_DIFF);
  CombineRgn(r1, r1, r7, RGN_XOR);

  formRgn := CreateRectRgn(0, 0, 0, 0);
  CombineRgn(formRgn, r1, 0, RGN_COPY);

  DeleteObject(r1);
  DeleteObject(r2);
  DeleteObject(r3);
  DeleteObject(r4);
  DeleteObject(r5);
  DeleteObject(r6);
  DeleteObject(r7);

  //Создание круглой кнопки закрытия
  butRgn := CreateEllipticRgn(50, 50, 150, 150);
  SetWindowRgn(Button1.Handle, butRgn, FALSE);
  SetWindowRgn(Handle, formRgn, TRUE);
end;

procedure TfrmManyRgn.Button1Click(Sender: TObject);
begin
  Close;
end;

end.
