Содержание материала

Комбинирование регионов

 

Результат комбинирования определяется четвёртым параметром функции CombineRgn. Давайте посмтрим, какие значения он может принимать.

 

RGN_ADD Пересечение двух регионов p2 и p3

RGN_COPY Создаёт копию региона p2

RGN_DIFF Вернёт часть p2, не являющуюся частью p3

RGN_OR Объединение двух регионов p2 и p3

RGN_XOR Объединяет регионы p2 и p3, исключая пересекающиеся области

 

Возвращаемые значения могут быть NULLREGION (пустой регион), SIMPLEREGION (один прямоугольник), COMPLEXREGION (всё остальное) и ERROR (нифига не создано). Посмотрим, как это выглядит на практике (чтобы не сильно мучитья, я просто дописывал предыдущий пример).

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

ap: array [1..7] of TPoint;

av: array [1..2] of integer;

r, r2, r3, r4: hRGN;

begin

ap [1] := Point (0, 0);

ap [2] := Point (Width, 0);

ap [3] := Point (Width, Height div 2);

ap [4] := Point (0, Height div 2);

ap [5] := Point (Width div 2, Height div 2);

ap [6] := Point (0, Height);

ap [7] := Point (Width, Height);

av [1] := 4;

av [2] := 3;

r := CreatePolyPolygonRgn (ap, av, 2, WINDING);

try

  r2 := CreateRoundRectRgn

    (Width div 4 - 20, Height div 6 - 20,

     Width div 4 + 20, Height div 6 + 20, 16, 16);

  r3 := CreateRoundRectRgn

    (Width div 4 * 3 - 20, Height div 6 - 20,

     Width div 4 * 3 + 20, Height div 6 + 20, 16, 16);

  r4 := CreateEllipticRgn

     (Width div 10, Height div 9 * 3,

     Width div 10 * 9, Height div 9 * 4);

  try

    CombineRgn (r, r, r2, RGN_XOR);

    CombineRgn (r, r, r3, RGN_XOR);

    CombineRgn (r, r, r4, RGN_XOR);

  finally

    DeleteObject (r2);

    DeleteObject (r3);

    DeleteObject (r4);

  end;

  SetWindowRgn (Handle, r, TRUE);

finally

  DeleteObject (r);

end;

end;

 

 

 

clip0085

 

Важно помнить, что первый параметр, вновь создаваемый регион, должен существовать до вызова функции.

 

Нерасмотренной из первой группы функций осталась только ExtCreateRgn. Я сейчас не буду на ней заостряться, скажу только, что на пару с функцией GetRegionData, она может пригодиться, например, для сохранения и загрузки регионов в файл / из файла.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить