Delphi. Трюки и эффекты (Чиртик, Борисок) - страница 8

Рис. 1.3. Использование области отсечения при рисовании окна

Рассмотрим операции, позволяющие создавать, удалять и модифицировать регионы. Создание и удаление регионов Создать регионы различной формы можно с помощью следующих API-функций:

...

function CreateRectRgn(p1, p2, p3, p4: Integer): HRGN;

function CreateEllipticRgn(p1, p2, p3, p4: Integer): HRGN;

function CreateRoundRectRgn(p1, p2, p3, p4, p5, p6: Integer): HRGN;

Все перечисленные здесь и ниже функции создания регионов возвращают дескриптор GDI-объекта «регион». Он впоследствии и передается в различные функции, работающие с регионами.

Итак, первая из приведенных функций (CreateRectRgn) предназначена для создания регионов прямоугольной формы. Параметры этой функции необходимо толковать следующим образом:

• p1 и р2 – горизонтальная и вертикальная координаты левой верхней точки прямоугольника;

• р3 и р4 – горизонтальная и вертикальная координаты правой нижней точки прямоугольника.

Следующая функция – CreateEllipticRgn – предназначена для создания региона эллиптической формы. Параметры этой функции – координаты прямоугольника (аналогично CreateRectRgn), в который вписывается эллипс.

Третья функция – CreateRoundRectRgn – создает регион – прямоугольник с округленными углами. При этом первые четыре параметра функции аналогичны соответствующим параметрам функции CreateRectRgn. Параметры р5 и рб – ширина и высота сглаживающих углы эллипсов (рис. 1.4).

Трех приведенных функций достаточно даже в том случае, если нужно создавать регионы очень сложной формы. Это достигается при помощи многочисленных операций над простыми регионами, как в приведенном далее примере создания региона по битовому шаблону. Однако рассмотрим еще одну несложную функцию, которая позволяет сразу создавать регионы-многоугольники по координатам точек – вершин многоугольников:

...

function CreatePolygonRgn(const Points; Count, FillMode: Integer): HRGN;

Рис. 1.4. Округление прямоугольника функцией CreateRoundRectRgn

Функция CreatePolygonRgn принимает следующие параметры:

• Points – указатель на массив записей типа TPoint, каждый элемент массива описывает одну вершину многоугольника, координаты не должны повторяться;

• Count – количество записей в массиве, на который указывает Points;

• FillMode – режим заливки региона (в данном случае, попадает ли внутренняя область многоугольника в регион).

Параметр FillMode принимает значения WINDING (попадает любая внутренняя область) или ALTERNATE (попадает внутренняя область, если она находится между нечетной и следующей четной сторонами многоугольника).