Delphi. Трюки и эффекты - стр. 12
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 приведена процедура создания шестиугольника.
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 содержит процедуру создания пятиугольника (неправильного).
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).
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).