Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 8

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ target="_blank" rel="nofollow" href="#i_009.png"/>

      Рис. 1.7. Окно и кнопки в форме многоугольников

      Создание регионов для областей отсечения формы, показанной на рис. 1.7, выглядит следующим образом (листинг 1.12).

Листинг 1.12. Окно и кнопки в форме многоугольников

      procedure TfrmPoly.FormCreate(Sender: TObject);

      var

      points: array [0..5] of TPoint;

      formRgn, but1Rgn, but2Rgn, but3Rgn: HRGN;

      begin

      //Создаем регионы для окна и кнопок

      //..шестиугольная кнопка

      Make6Angle(Button1.Width, Button1.Height, points);

      but1Rgn:= CreatePolygonRgn(points, 6, WINDING);

      SetWindowRgn(Button1.Handle, but1Rgn, False);

      //..треугольная кнопка

      Make3Angle(Button2.Width, Button2.Height, points);

      but2Rgn:= CreatePolygonRgn(points, 3, WINDING);

      SetWindowRgn(Button2.Handle, but2Rgn, False);

      //..пятиугольная кнопка

      Make5Angle(Button3.Width, Button3.Height, points);

      but3Rgn:= CreatePolygonRgn(points, 5, WINDING);

      SetWindowRgn(Button3.Handle, but3Rgn, False);

      //..форма в виде звезды

      MakeStar(Width, Height, points);

      formRgn:= CreatePolygonRgn(points, 5, WINDING);

      SetWindowRgn(Handle, formRgn, False);

      end;

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

Листинг 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;

      Пятиугольная звезда, используемая как область отсечения формы, создается при помощи приведенной СКАЧАТЬ