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

Чтение книги онлайн.

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

Жанр:
Серия:
Издательство:
Delphi. Трюки и эффекты - Александр Чиртик

Скачать книгу

сказано, что регион нужно удалять в том случае, если он не используется системой. Так вот, после того как регион назначен окну в качестве области отсечения, удалять его не следует. Функция назначения региона окну имеет следующий вид:

      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 (предполагается, что приведенный ниже код является телом одного из методов класса формы).

      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 – регион (предварительно созданный), куда сохранить результат;

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

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

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

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

      Кроме приведенных

Скачать книгу