- •WIN API функции в
- •WIN API функции в Delphi
- •WIN API функции в Delphi
- •WIN API функции в Delphi
- •Декларирование WIN API функций
- •Изменение стандартной экранной формы. Работа с регионами
- •Изменение стандартной экранной формы. Работа с регионами
- •Применение регионов
- •Применение регионов
- •API функции для создания
- •API функции для создания
- •API функции для создания
- •Дополнительные функции для работы с регионами
- •Дополнительные функции для работы с регионами
- •Дополнительные функции для работы с регионами
- •Назначение региона окну
- •Пример
API функции для создания
регионов
function CreatePolygonRgn(const Points; Count, FillMode: Integer): HRGN;
Функция CreatePolygonRgn создает регион, ограниченный многоугольником, вершины которого заданы в массиве Points (элемент массива – пара координат x, y). Параметр Count указывает количество точек в массиве, FillMode определяет, какие точки будут принадлежать региону.
function CreatePolyPolygonRgn (const pPtStructs; const pIntArray; p3, p4: Integer): HRGN;
Функция CreatePolyPolygonRgn создает регион, состоящий из нескольких регионов. Параметр pPtStructs является массивом массивов точек, pIntArray является массивом, содержащем количество точек (вершин) для каждого из регионов, p3 – количество
регионов, p4 – режим заполнения. |
11 |
|
API функции для создания
регионов
function CreateEllipticRgn(X1, Y1, X2, Y2: Integer): HRGN; function CreateEllipticRgnIndirect(const p1: TRect): HRGN;
Функции создают эллиптический регион (эллипс вписан в прямоугольник, заданный в первом случае координатами верхнего левого и нижнего правого углов, во втором - структурой p1: TRect с такими же координатами).
12
Дополнительные функции для работы с регионами
|
function |
Объединяет две области в одну. |
CombineRgn |
DestRgn – дескриптор результирующей области; |
|
(DestRgn, |
Rgn1, |
Rgn1, Rgn2 – дескрипторы объединяемых областей; |
Rgn2: |
Cardinal; |
CombineMode – параметр, указывающий способ объединения. |
CombineMode: |
Параметр CombineMode может иметь следующие значения: |
|
Ineger): Integer; |
RGN_AND – включает в результат общие части областей; |
|
|
|
RGN_COPY– копирует область Rgn1 в DestRgn; |
|
|
RGN_DIFF – исключает из Rgn1 часть, принадлежащую Rgn2; |
|
|
RGN_OR – объединяет области; |
|
|
RGN_XOR – включает в результат только те части областей, |
|
|
которые не принадлежат им одновременно. |
|
|
До применения функции область DestRgn уже должна |
|
|
существовать и иметь размеры, достаточные для размещения |
|
|
объединенной области. |
function |
|
Проверяет эквивалентность двух областей. Rgn1, Rgn2 - |
EqualRgn(Rgn1,Rgn |
дескрипторы сравниваемых областей. |
|
2: Cardinal): Bool; |
13 |
|
|
|
Дополнительные функции для работы с регионами
function |
FillRgn(DC, |
Закрашивает область кистью. |
Rgn,Brush: |
Cardinal): Bool; |
DC – дескриптор канвы окна; |
|
|
Rgn – дескриптор области; |
|
|
Brush – дескриптор кисти. |
function |
FrameRgn(DC, |
Обводит область кистью высотой Height и |
Rgn,Brush: |
Cardinal; |
шириной Width пикселей. |
Width,Height: |
Integer): Bool; |
DC – дескриптор канвы окна; |
|
|
Rgn – дескриптор области; |
|
|
Brush – дескриптор кисти. |
Function |
InvertRgn(DC, |
Инвертирует цвет всех точек внутри области. |
Rgn:Cardinal): Bool; |
DC – дескриптор канвы окна; |
|
|
|
Rgn – дескриптор области. |
14
Дополнительные функции для работы с регионами
function |
OffsetRgn(DC, |
Смещает область на dX по горизонтали и на |
Rgn:Cardinal; dX, dY: |
dY по вертикали. DC - дескриптор канвы окна; |
|
Integer):Integer; |
Rgn - дескриптор области. |
|
function |
PaintRgn(DC, |
Rgn - дескриптор области. |
Rgn:Cardinal): Bool; |
|
|
function |
|
Проверяет принадлежность точки (X,Y) области |
PtInRegion(Rgn:Cardinal; |
с дескриптором Rgn. |
|
X, Y: Integer):Bool; |
|
|
function |
|
Проверяет принадлежность прямоугольника |
RectInRegion(Rgn:Cardinal |
Rect области с дескриптором Rgn. |
|
; Rect: TRect):Bool; |
15 |
|
|
|
Назначение региона окну
Назначение региона окну производится при помощи процедуры: Procedure SetWindowRgn(
HWND hWnd, |
// дескриптор окна |
HRGN hRgn, |
// дескриптор региона |
BOOL bRedraw // флаг, управляющий перерисовкой окна после назначения региона);
end;
16
|
Пример |
procedure TForm1.RebuildWindowRgn; |
|
Var |
Rgn, Rgn1 : HRGN; // Регионы |
Begin |
// Настройка размеров окна |
Height := 400; Width := 600;
// Создание эллиптического региона размером с окно Rgn := CreateEllipticRgn(0, 0, width, height);
//Создание прямоугольного региона Rgn1 := CreateRectRgn(50, 50, 100, 100);
//Комбинирование регионов по RGN_XOR (сумма за вычетом пересечения) CombineRgn (Rgn, Rgn, Rgn1, RGN_XOR);
//Создание региона
Rgn1 := CreateRectRgn(250, 250, 100, 100);
//Комбинирование регионов по RGN_DIFF (Rgn - Rgn1) CombineRgn(Rgn, Rgn, Rgn1, RGN_DIFF);
//Назначение региона текущему окну
SetWindowRgn(Handle, Rgn, true); |
17 |
|
end; |
||
|
Пример
В результате окно становится эллиптическим, внутри окна есть прозрачная прямоугольная и "дырка", в левом углу к нему добавлена прямоугольная область (хорошо видна работа CombineRgn в режиме RGN_XOR).