function CombineRgn(DestRgn, Rgnl, Rgn2: Cardinal; Com-bineMode: Ineger): Integer;
| Объединяет две области в одну: DestRgn - дескриптор результирующей области; Rgnl, Rgn2 -дескрипторы объединяемых областей; CombineMode - параметр, указывающий способ объединения; этот параметр, а также возвращаемое значение описаны ниже
|
function CreateEllipticRgn(XI, Yl, X2, Y2: Integer): Cardinal;
| Создает эллиптическую область
|
function CreatePoly-gonRgn(var Points; Count, PolyFillMode: Integer): Cardinal;
| Создает область в виде многоугольника: Points - массив координат всех вершин многоугольника; Count - количество вершин; PolyFillMode -режим заполнения многоугольника (см. ниже)
|
function CreateRectRgn(XI,
Yl, X2, Y2: Integer): Cardi
nal;
| Создает прямоугольную область
|
function CreateRoundRectRgn(Xl, Yl, X2, Y2, X3, Y3: Integer): Cardinal;
| Создает область со скругленными углами; параметры обращения иллюстрирует
|
function EqualRgn(Rgnl,Rgn2: Cardibal): Bool;
| Проверяет эквивалентность двух областей
|
function FillRgn(DC, Rgn,Brush: Cardinal): Bool;
| Закрашивает область кистью: DC - дескриптор канвы окна; Rgn - дескриптор области; Brush - дескриптор кисти
|
function FrameRgn(DC, Rgn,Brush: Cardinal; Width,Height: Integer): Bool;
| Обводит (но не заполняет) область кистью высотой Height и шириной Width пикселей
|
function InvertRgn(DC, Rgn:Cardinal): Bool;
| Инвертирует все пиксели внутри области
|
function OffsetRgn(DC, Rgn:Cardinal; dX, dY: Integer):Integer;
| Смещает область на dX по горизонтали и на dY по вертикали
|
function PaintRgn(DC, Rgn:Cardinal): Bool;
| Закрашивает область текущей кистью
|
function PtInRegion(Rgn:Cardinal; X, Y: Integer):Bool;
| Проверяет принадлежность точки (X,Y) области Rgn
|
function RectInRegion(Rgn:Cardinal; Rect: TRect):Bool;
| Проверяет принадлежность прямоугольника Rect области Rgn
|
function SetWindowRgn(DC,Rgn: Cardina; Redraw: Bool): Integer;
| Показывает принадлежащую окну с канвой DC область Rgn вместо окна; Redraw- разрешает/запрещает перерисовку области; все не вошедшие в область части окна не показываются (см. ниже)
|
Параметр combineMode в функции combineRgn можетзначения:
rgn_and - включает в результат общие части областей; rgn_copy -копирует область Rgnl В DestRgn; RGN_DIFF - исключает изRgnl часть, принадлежащую Rgn2; rgn_or - объединяет области; rgn_xor -включает в результат только те части областей, которые не принадлежат им одновременно. Область DestRgn уже должна существовать и иметь размеры, достаточные для размещения объединенной области. При обращении к функции createPoiygonRgn параметр Poly FillModeможет иметь значения: Alternate И Winding.В первом случае заполнение многоугольника идет последовательно между двумя близлежащими его сторонами: сначала между 1-й и 2-й, затем между 2-й и 3-й и т. д. В режиме winding заполняется все внутреннее пространство области.
Во всех случаях Windows автоматически проводит линию между последней и первой точкой многоугольника, делая его замкнутым.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
Tуре
Tform1 = class (TForm)
PaintBoxl: TPaintBox;
PaintBox2: TPaintBox;
Button1: TButton;
procedure ButtonlClick(Sender: TObject);
Private
{ Private declarations } public
{ Public declarations } end;
Var
Form1: Tform1;
implernentation
$R *.DFM)
procedure TFormI.ButtonlClick(Sender: TObject);
Var
Rgnl, Rgn2: Cardinal;
Const
Points: array [1..5, 1..2]of Integer =
C(91, 0), (160, 183), (0, 70), (183, 70), (23, 183));
Begin
Rgn1:= CreatePolygonRgn(Points, 5, Alternate);
Rgn2:= CreatePolygonRgn(Points, 5, Winding);
with PaintBoxl.Canvas do begin
Brush.Color:= clBlack;
FillRgn(Handle, Rgnl, Brush.Handle);
End;
with PaintBox2.Canvas do begin
Brush.Color:= clBlack;
FillRgn(Handle, Rgn2, Brush.Handle);
End;
End;
End.
Обратите внимание: прорисовка и объединение областей доступны, только если области видны в окне (для создания предыдущего рисунка нельзя, например, использовать обработчик формы OnActivate).
Функция SetWindowRgn, как уже отмечалось, поручает прорисовку окна самой Windows, при этом фактически прорисовывается не область, а лишь та часть окна, которая ограничена ею. Любые заливки области, ее очерчивание и объединение с другими областями игнорируются.
16.4.5. Классы TGraphic и TPicture
Важное место в графическом инструментарии Delphi занимают классыTGraphic и TPicture.
TGraphic - это абстрактный класс, инкапсулирующий общие свойства и методы трех своих потомков: пиктограммы (TIcon), метафайла (TMetafile) и растрового изображения (TBitmap). Общей особенностью потомков TGraphic является то, что обычно они сохраняются в файлах определенного формата. Пиктограммы представляют собой небольшие растровые изображения, снабженные специальными средствами, регулирующими их прозрачность. Для файлов пиктограмм обычно используется расширение ico. Метафайл - это изображение, построенное на графическом устройстве с помощью специальных команд, которые сохраняются в файле с расширением wmf или emf. Растровые изображения - это произвольные графические изображения в файлах со стандартным расширением bmp.
Свойства класса TGraphic:
property Empty: Boolean;
| Содержит True, если с объектом не связано графическое изображение
|
property Height: Integer;
| Содержит высоту изображения в пикселях
|
property Modified: Boolean;
| Содержит True, если графический объект изменялся
|
property Palette: HPALETTE;
| Содержит цветовую палитру графического объекта
|
property PaletteModified: Boolean;
| Содержит True, если менялась цветовая палитра графического объекта
|
property Transparent: Boolean;
| Содержит True, если объект прозрачен для фона, на котором он изображен
|
property Width: Integer;
| Содержит ширину изображения в пикселях
|
Методы Класса TGraphic:
|
procedure LoadFromClipooardFormat (AFormat: Word;AData: THandle; APalette:HPALETTE);
| Ищет в буфере межпрограммного обмена Clipboard зарегистрированный формат AFormat и, если формат найден, загружает из буфера изображение AData и его палитру Apalette
|
procedure LoadFromrile(const FileName:String);
| Загружает изображение из файла FileName
|
procedure LoadFromStream(Stream: TStream);
| Загружает изображение из потока данных Stream
|
procedure SaveToClipboardFormat (var AFormat: Word;var AData: THandle; varAPalette: HPALETTE);
| Помещает графическое изображение Adata и его цветовую палитру APalette в буфер межпрограммного обмена в формате Af ormat
|
procedure SaveToFile(constFileName: Strings;
| Сохраняет изображение в файле FileName
|
procedure SavePoStream(Stream: TStream);
| Сохраняет изображение в потоке Stream
|
Полнофункциональный класс TPicture инкапсулирует в себе все необходимое для работы с готовыми графическими изображениями - пиктограммой, растром или метафайлом. Его свойство Graphic может содержать объект любого из этих типов, обеспечивая нужный полиморфизм методов класса.
Свойства класса TPicture:
property Bitmap: TBitmap;
| Интерпретирует графический объект как растровое изображение
|
property Graphic: TGraphic;
| Содержит графический объект
|
property Height: Integer;
| Содержит высоту изображения в пикселях
|
property Icon: TIcon;
| Интерпретирует графический объект как пиктограмму
|
property Metafile: TMetafile;
| Интерпретирует графический объект как метафайл
|
property width: Integer;
| Содержит ширину изображения в пикселях
|
procedure Assign(Source: TPersistent);
| Связывает собственный графический объект Graphic с объектом Source
|
procedure LoadFromClipboardFormat
(AFormat: Word;AData: THandle;
APalette:HPALETTE);
| Ищет в буфере межпрограммного обмена Clipboard зарегистрированный формат AFormat и, если формат найден, загружает из буфера изображение AData и его палитру APalette
|
procedure LoadFromFile(const FileName:String);
| Загружает изображение из файла FileName
|
class procedure Register; ClipboardFormat(AFormat:
Word; AGraphicClass: TGraphicClass);
| Используется для регистрации в Clipboard
нового формата изображения
|
class procedure Register; FileFormat (const AExtension, ADescription: String; AGraphicClass: Tgraphic Class);
| Используется для регистрации нового файлового формата
|
class procedure RegisterFileFormatRes(const AExtension: String; ADescriptionResID: Integer; Agraphic Class: TGraphicClass);
| Используется для регистрации нового формата ресурсного файла
|
procedure SaveToClipboardFormat (var AFormat: Word; var AData: THandle; varAPalette: HPALETTE);
| Помещает графическое изображение AData и его цветовую палитру APalette в буфер межпрограммного обмена в формате AFormat
|
procedure SaveToFile(const
FileName: Strings;
| Сохраняет изображение в файле FileName
|
class function SupportsClipboardFormat(AFormat: Word): Boolean;
| Возвращает True, если формат Aformat зарегистрирован в буфере межпрограммного обмена Clipboard
|
class procedure UnregisterGraphicClass(AClass:TGraphicClass);
| Делает недоступными любые графические объекты класса Aclass
|
Список используемой литературы