Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Визуальное программирование / Лабораторная работа-9_ИС

.doc
Скачиваний:
33
Добавлен:
07.06.2015
Размер:
278.53 Кб
Скачать

Лабораторная работа № 9

Работа с WIN API функциями. Изменение внешнего вида стандартной экранной формы. Регионы

Теоретический материал

Регион создается одной из функций API:

function CreateRectRgn(X1, Y1, X2, Y2: Integer): HRGN;

function CreateRectRgnIndirect(const p1: TRect): HRGN;

Функция CreateRectRgn создает регион прямоугольной формы (параметры задают координаты для верхнего левого и нижнего правого угла прямоугольника, задающего регион. Функция CreateRectRgnIndirect аналогична функции CreateRectRgn – разница в том, что вместо четырех координат функция получает структуру типа TRect .

function CreateRoundRectRgn(X1, Y1, X2, Y2, H, W: Integer): HRGN;

Функция CreateRoundRectRgn аналогична функции CreateRectRgn, но создаваемая прямоугольная область имеет скругленные углы. X1, Y1 – координаты верхнего левого угла, X2, Y2 – координаты нижнего правого, H, W – высота и ширина эллипса, применяемого для скругления углов

function CreatePolygonRgn(const Points; Count, FillMode: Integer): HRGN;

Функция CreatePolygonRgn создает регион, ограниченный многоугольником, вершины которого заданы в массиве Points (элемент массива – пара координат x, y). Параметр Count указывает количество точек в массиве, FillMode определяет, какие точки будут принадлежать региону (возможно два режима – ALTERNATE и WINDING) .

function CreatePolyPolygonRgn (const pPtStructs; const pIntArray; p3, p4: Integer): HRGN;

Функция CreatePolyPolygonRgn создает регион, состоящий из нескольких регионов. Параметр pPtStructs является массивом массивов точек (что-то типа двумерного массива), pIntArray является массивом, содержащем количество точек (вершин) для каждого из регионов, p3 – количество регионов, p4 – режим заполнения.

function CreateEllipticRgn(X1, Y1, X2, Y2: Integer): HRGN;

function CreateEllipticRgnIndirect(const p1: TRect): HRGN;

Данные функции создают эллиптический регион (эллипс вписан в прямоугольник, заданный в первом случае координатами верхнего левого и нижнего правого углов, во втором - структурой p1: TRect с такими же координатами).

Дополнительные функции для работы с регионами.

function CombineRgn(DestRgn, Rgn1, Rgn2: Cardinal; CombineMode: Ineger): Integer;

Объединяет две области в одну.

DestRgn – дескриптор результирующей области;

Rgn1, Rgn2 – дескрипторы объединяемых областей;

CombineMode – параметр, указывающий способ объединения.

Параметр CombineMode может иметь следующие значения:

RGN_AND- включает в результат общие части областей;

RGN_COPY- копирует область Rgn1 в DestRgn;

RGN_DIFF- исключает из Rgn1 часть, принадлежащую Rgn2;

RGN_OR- объединяет области;

RGN_XOR- включает в результат только те части областей, которые не принадлежат им одновременно.

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

function EqualRgn(Rgn1,Rgn2: Cardinal): Bool;

Проверяет эквивалентность двух областей. Rgn1, Rgn2 - дескрипторы сравниваемых областей.

function FillRgn(DC, Rgn,Brush: Cardinal): Bool;

Закрашивает область кистью.

DC – дескриптор канвы окна;

Rgn – дескриптор области;

Brush – дескриптор кисти.

function FrameRgn(DC, Rgn,Brush: Cardinal; Width,Height: Integer): Bool;

Обводит область кистью высотой Height и шириной Width пикселей.

DC – дескриптор канвы окна;

Rgn – дескриптор области;

Brush – дескриптор кисти.

Function InvertRgn(DC, Rgn:Cardinal): Bool;

Инвертирует цвет всех точек внутри области.

DC – дескриптор канвы окна;

Rgn – дескриптор области.

function OffsetRgn(DC, Rgn:Cardinal; dX, dY: Integer):Integer;

Смещает область на dX по горизонтали и на dY по вертикали. DC - дескриптор канвы окна;

Rgn - дескриптор области.

function PaintRgn(DC, Rgn:Cardinal): Bool;

Rgn - дескриптор области.

function PtInRegion(Rgn:Cardinal; X, Y: Integer):Bool;

Проверяет принадлежность точки (X,Y) области с дескриптором Rgn.

function RectInRegion(Rgn:Cardinal; Rect: TRect):Bool;

Проверяет принадлежность прямоугольника Rect области с дескриптором Rgn.

Назначение региона окну производится при помощи процедуры:

Procedure SetWindowRgn(

HWND hWnd, // дескриптор окна

HRGN hRgn, // дескриптор региона

BOOL bRedraw // флаг, управляющий перерисовкой окна после назначения региона

);

Пример.

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);

end;

В результате окно становится эллиптическим, внутри окна есть прозрачная прямоугольная и "дырка", в левом углу к нему добавлена прямоугольная область (хорошо видна работа CombineRgn в режиме RGN_XOR).

Задания для самостоятельной работы.

  1. Проанализировать работу с WIN API функциями в Delphi.

  2. Проанализировать пример на использование регионов.

  3. Изменить внешний вид экранных форм в двух ранее созданных приложениях.

Контрольные вопросы

  1. Объектно-ориентированная методология разработки программ.

  2. Win API функции и их применение.

  3. Win API функции в Delphi.

  4. Работа с регионами в Delphi.

  5. Назначение функций CreateRectRgn, CreateRoundRectRgn, CreatePolygonRgn, CreateEllipticRgn.

  6. Процедура SetWindowRgn.

  7. Функция CombineRgn.