Программирование в 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 констант, в качестве параметра p4 функции CombineRgn можно использовать параметр RGN_COPY. При его использовании копируется регион, заданный параметром p2, в регион, заданный параметром p1.
Тщательно рассчитывая координаты точек регионов-аргументов, можно с использованием функции CombineRgn создавать регионы самых причудливых форм, в чем вы сможете убедиться ниже.