Размер шрифта
-
+

Программирование в Delphi. Трюки и эффекты - стр. 12

Листинг 1.13. Создание треугольника

procedure Make3Angle(width, height: Integer; var points: array of TPoint);

begin

points[0].X:= 0;

points[0].Y:= height – 1;

points[1].X:= width div 2;

points[1].Y:= 0;

points[2].X:= width – 1;

points[2].Y:= height – 1;

end;


В листинге 1.14 приведено описание процедуры создания шестиугольника.

Листинг 1.14. Создание шестиугольника

procedure Make6Angle(width, height: Integer; var points: array of TPoint);

begin

points[0].X:= 0;

points[0].Y:= height div 2;

points[1].X:= width div 3;

points[1].Y:= 0;

points[2].X:= 2 * (width div 3);

points[2].Y:= 0;

points[3].X:= width – 1;

points[3].Y:= height div 2;

points[4].X:= 2 * (width div 3);

points[4].Y:= height – 1;

points[5].X:= width div 3;

points[5].Y:= height – 1;

end;


Листинг 1.15 содержит описание процедуры создания пятиугольника (неправильного).

Листинг 1.15. Создание пятиугольника

procedure Make5Angle(width, height: Integer; var points: array of TPoint);

var a: Integer; //Сторона пятиугольника

begin

a:= width div 2;

points[0].X:= a;

points[0].Y:= 0;

points[1].X:= width – 1;

points[1].Y:= a div 2;

points[2].X:= 3 * (a div 2);

points[2].Y:= height – 1;

points[3].X:= a div 2;

points[3].Y:= height – 1;

points[4].X:= 0;

points[4].Y:= a div 2;

end;


Пятиугольная звезда, используемая как область отсечения формы, создается с помощью описанной в листинге 1.15 процедуры Make5Angle. После ее создания изменяется порядок следования вершин пятиугольника, чтобы их обход при построении региона выполнялся в той же последовательности, как рисуется звезда карандашом на бумаге (например, 1-3-5-2-4) (листинг 1.16).

Листинг 1.16. Создание пятиугольной звезды

procedure MakeStar(width, height: Integer; var points: array of TPoint);

begin

Make5Angle(width, height, points);

//При построении звезды точки пятиугольника обходятся не по порядку,

//а через одну

Swap(points[1], points[2]);

Swap(points[2], points[4]);

Swap(points[3], points[4]);

end;


Процедура MakeStart (листинг 1.16) использует дополнительную процедуру Swap, меняющую местами значения двух передаваемых в нее аргументов. Процедура Swap реализуется чрезвычайно просто и потому в тексте книги не приводится.

Комбинированные регионы

Вы уже научились создавать и использовать простые регионы. Однако многим может показаться недостаточным тех форм окон, которые можно получить с использованием в качестве области отсечения лишь одного несложного региона. Пришло время заняться созданием окон более сложной формы, применяя рассмотренные ранее операции над регионами.

«Дырявая» форма

Этот простейший пример сомнительной полезности предназначен для первого знакомства с операциями над регионами. Здесь применяется только одна из возможных операций – операция XOR для формирования «дырок» в форме (рис. 1.8).

Страница 12