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

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

• hRgn – дескриптор региона, назначаемого в качестве области отсечения (в простейшем случае является значением, возвращенным одной из функций создания региона);

• bRedraw – флаг перерисовки окна после назначения новой области отсечения (для видимых окон обычно используется значение True, для невидимых – False).

Чтобы получить копию региона, формирующего область отсечения окна, можно использовать API-функцию GetWindowRgn:


function GetWindowRgn(hWnd: HWND; hRgn: HRGN): Integer;


Первый параметр функции – дескриптор (Handle) интересующего окна. Второй параметр – дескриптор предварительно созданного региона, который в случае успеха модифицируется функцией GetWindowRgn так, что становится копией региона, формирующего область отсечения окна. Значения целочисленных констант – возможных возвращаемых значений функции – следующие:

• NULLREGION – пустой регион;

• SIMPLEREGION – регион в форме прямоугольника;

• COMPLEXREGION – регион сложнее, чем прямоугольник;

• ERROR – при выполнении функции возникла ошибка либо окну задана область отсечения.

Далее приведен пример использования функции GetWindowRgn (предполагается, что приведенный ниже код является телом одного из методов класса формы).


var rgn: HRGN;

begin

rgn:= CreateRectRgn(0,0,0,0); //Первоначальная форма региона не важна

if GetWindowRgn(Handle, rgn) <> ERROR then

begin

//Операции с копией региона, формирующего область отсечения окна...

end;

DeleteObject(rgn); //Мы пользовались копией региона, которую должны

//удалить (здесь или в ином месте, но сами)

end;


Операции над регионами

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


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


Параметры этой функции следующие:

• p1 – регион (предварительно созданный), предназначенный для сохранения результата;

• p2, p3 – регионы-аргументы операции;

• p4 – тип операции над регионами.

Более подробно действие функции CombineRgn при различных значениях параметра p4 поясняется в табл. 1.2.

Таблица 1.2. Операции функции CombineRgn

Кроме приведенных в табл. 1.2 констант, в качестве параметра p4 функции CombineRgn можно использовать параметр RGN_COPY. При его использовании копируется регион, заданный параметром p2, в регион, заданный параметром p1.

Тщательно рассчитывая координаты точек регионов-аргументов, можно с использованием функции CombineRgn создавать регионы самых причудливых форм, в чем вы сможете убедиться ниже.

Страница 9