...
Примечание
При создании регионов с помощью любой из указанных выше функций координаты точек задаются в системе координат того окна, в котором предполагается использовать регион. Так, если у нас есть кнопка 40 х 30, левый верхний угол которой расположен на форме в точке (100; 100), то для того, чтобы создать для кнопки прямоугольный регион 20 х 15 с левой верхней точкой (0;0) относительно начала координат кнопки, следует вызвать функцию CreateRectRgn с параметрами (0, 0, 19, 14), а не (100, 100, 119, 114).
Поскольку регион является GDI-объектом (подробнее в гл. 6), то для его удаления, если он не используется системой, применяется функция удаления GDI-объектов DeleteObject:
...
function DeleteObject(p1: HGDIOBJ): BOOL;
Регион как область отсечения при рисовании окна
Было сказано, что регион нужно удалять в том случае, если он не используется системой. Так вот, после того как регион назначен окну в качестве области отсечения, удалять его не следует. Функция назначения региона окну имеет следующий вид:
...
function SetWindowRgn(hWnd: HWND; hRgn: HRGN; bRedraw: BOOL): Integer;
Функция возвращает 0, если произвести операцию не удалось, и ненулевое значение в противном случае. Параметры функции SetWindowRgn следующие:
• hWnd – дескриптор окна, для которого устанавливается область отсечения (свойство Handle формы или элемента управления);
• hRgn – дескриптор региона, назначаемого в качестве области отсечения (в простейшем случае является значением, возвращенным одной из функций создания региона);
• bRedraw – флаг перерисовки окна после назначения новой области отсечения, для видимых окон обычно используется значение True, для невидимых – False.
Чтобы получить копию региона, формирующего область отсечения окна, можно использовать API-функцию GetWindowRgn:
...
function GetWindowRgn(hWnd: HWND; hRgn: HRGN): Integer;
Первый параметр функции – дескриптор (Handle) интересующего нас окна. Второй параметр – дескриптор предварительно созданного региона, который в случае успеха модифицируется функцией GetWindowRgn так, что становится копией региона, формирующего область отсечения окна. Описания целочисленных констант – возможных возвращаемых значений функции:
• NULLREGION – пустой регион;
• SIMPLEREGION – регион в форме прямоугольника;
• COMPLEXREGION – регион сложнее, чем прямоугольник;
• ERROR – при выполнении функции возникла ошибка (либо окну задана область отсечения).
Далее приводится пример использования функции GetWindowRgn (предполагается, что приведенный ниже код является телом одного из методов класса формы).