Комбинирование регионов
Результат комбинирования определяется четвёртым параметром функции 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; |
Важно помнить, что первый параметр, вновь создаваемый регион, должен существовать до вызова функции.
Нерасмотренной из первой группы функций осталась только ExtCreateRgn. Я сейчас не буду на ней заостряться, скажу только, что на пару с функцией GetRegionData, она может пригодиться, например, для сохранения и загрузки регионов в файл / из файла.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!