Содержание материала

При создании окна непрямоугольной формы используются API функции

 

CreateEllipticRgn, CreateRectRgn, CreatePolygonRgn, CreateRoundRectRgn, CombineRgn.

 

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

R1, R2: HRgn;

begin

  // Создаем линзу (пересечение двух эллипсов)

  R1 := CreateElliPticRgn(-150,-300,363,400); // Задаем

  // координаты эллипса. Верхняя левая точка формы имеет

  // координаты 0,0

  R2 := CreateEllipticRgn(363+150,-300,5,400);

  CombineRgn(R1,R1,R2,RGN_AND); // Получаем пересечение

  // Отрезаем сверху слева

  R2:= CreateEllipticRgn(-40,-30,182,20);

  CombineRgn(R1,R1,R2,RGN_DIFF); // Вычитаем

  // Отрезаем сверху справа

  R2:= CreateEllipticRgn(180,-30,363+40,20);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  // Назначаем полученный регион форме

  SetWindowRgn(Handle, R1, True);

end;

 

 

 

Если Вы все ввели правильно, то при запуске проекта получите окно в виде щита, как у Norton CrashGuard. Как это получилось, можно понять из схемы 1. Зеленые эллипсы при пересечении образуют линзу, красные эллипсы вычитаются.

 

Размер формы должен позволить разместиться на ней щиту полностью, иначе Вы получите усеченный вариант изображения.

 

Переопределение функции WMNCHitTest позволит перетаскивать окно, захватив его мышкой.

Code:

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);

begin

inherited;

Message.Result := HTCAPTION;

end;

 

Теперь немного усложним задачу. Создадим фигурный щит

 

Синие фигуры складываются, красные  вычитаются. Исходный код приведен ниже:

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить