Справочник по компонентам Дельфи

Автор: Пользователь скрыл имя, 06 Февраля 2013 в 01:52, аттестационная работа

Описание работы

Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса.

Работа содержит 1 файл

componens.doc

— 980.33 Кб (Скачать)

(Pb) property TabOrder: TTabOrder;

TTabOrder = -1..32767;

При разработке формы номера присваиваются последовательно в порядке добавления компонентов, начиная с 0. Нулевой компонент первым получит фокус при активизации. Программист может менять значение этого свойства, не заботясь об учете других элементов, т. к. перенумерация производится автоматически. При отсутствии табулостопа на элементе его свойство TabOrder равно -1.

Можно получить и весь список, содержащий иерархию дочерних элементов, имеющих табулостоп:

procedure GetTabOrderList(List: TList) ;

Этот метод добавляет в уже существующий список List все дочерние компоненты, имеющие табулостоп; каждый из них при добавлении делает то же самое. Таким образом, элементы списка имеют тип TWinControl.

Два метода предназначены для управления показом перекрывающихся дочерних элементов управления:

procedure BringToFront;

procedure SendToBack;

Метод BringToFront переносит элемент в конец родительского списка (визуализация начинается с первого) и показывает его поверх остальных. SendToBack, наоборот, переносит элемент в начало и таким образом сверху окажутся все перекрывающиеся с ним. При этом элемент теряет фокус ввода (если имел).

Класс инкапсулирует шрифт Windows. В Delphi допускаются только горизонтально расположенные шрифты. В конструкторе объекта по умолчанию принимается шрифт System цвета clWindowText размера 10 пунктов.

 

ЗЛ.П. Привязка к родительским свойствам

Для придания приложению строгого внешнего вида требуется, чтобы все визуальные компоненты имели единый стиль. Чтобы избавиться от необходимости изменять код элементов-потомков при изменении внешнего вида предка, в них нужно правильно установить свойства:

(pdi property ParentColor: boolean;

@ property ParentCtl3D: boolean;

(Pb) property ParentFont: boolean;

(pS) property ParentShowHint: boolean;

Все четыре свойства отвечают за наличие связи между соответствующими свойствами в родительских и дочерних элементах. Если какое-то из них у элемента установлено в True, это означает, что он наследует свойство от родителя и меняет цвет, трехмерность, шрифт или показ ярлычков вместе и вслед за ним. Но если само свойство дочернего элемента (например, Color или ParentColor) переустановить явно, то связь с родительским свойством разрьюается.

 

Графическая подсистема

Разработчики Delphi уделили большое внимание возможностям работы с деловой графикой: простота и удобство ее использования напрямую сказывается на простоте и удобстве созданных приложений. Вместо дебрей графического интерфейса Windows разработчик получил несколько инструментов, сколь понятных, столь же и мощных.

Другой бич работы с графикой в Windows -- проблема рационального использования ресурсов. Для больших программных комплексов она стала в последнее время нешуточной (это касается, по крайней мере, версий Windows до 3.11 включительно). Такие монстры, как Microsoft Office, потребляют во время работы львиную долю ресурсов. В Delphi ресурсами GDI незримо для пользователя "заведуют" специальные менеджеры, ведущие списки всех размещенных кистей, перьев, шрифтов и т. п. и управляющие их использованием.

Обязательным для любого объекта, связанного с графикой в Delphi является событие

property OnChange: TNotifyEvent;

Его обработчик вызывается всякий раз, когда изменились какие-то характеристики объекта, влияющие на его внешний вид.

В стандартном GDI основой для рисования служит дескриптор контекста устройства hDC и связанные с ним шрифт, перо и кисть. В состав VCL входят объектно-ориентированные надстройки над последними, назначением которых является удобный доступ к свойствам инструментов и прозрачная для пользователя обработка всех их изменений. Сначала опишем три этих класса.

 

 

Класс TFont

Свойства класса приведены в таблице:

property Handle: HFont;

Содержит дескриптор шрифта.

(р5) property Name: TFontName;

Содержит имя (начертание) шрифта, например, Arial.

(РЁ) property Style: TFontStyles; TFontStyle = (fsBold, fsltalic, fsUnderline, fsStrikeOut); TFontStyles = set of TFontStyle;

Содержит стиль (особенности начертания) шрифта: соответственно жирный, курсив, подчеркнутый и перечеркнутый.

(РЙ) property Color: TColor; TColor = -(COLORENDCOLORS 4-1) .,$2FFFFFF;

Определяет цвет шрифта.

(Из) property Pitch: TFontPitch ; TFontPitch = (fpDefault, fpVariable, fpFixed) ;

Определяет способ установки ширины символов шрифта. Значение fpFixed соответствует моноширинным шрифтам; fpVariable -- шрифтам с переменной шириной символа. Установка fpDefault означает принятие того способа, который определен начертанием.

(PE) property Height: Integer;

Содержит значение высоты шрифта в пикселах.

property PixelsPerInch: Integer;

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

(Pb) property Size: Integer;

Содержит размер шрифта в пунктах (принято в Windows). Это свойство связано с Height соотношением.

Font.Size := -Font.Height * 72 / Font.PixelsPerInch;


 

Класс ТРеn

ТРеп = class(TGraphicsObject)

Инкапсулирует перо. В конструкторе по умолчанию создается непрерывное (psSolid) черное перо шириной в один пиксел. Свойства класса приведены в таблице:

property Handle: HPen;

Содержит дескриптор пера.

(Pb) property Color: TColor;

Определяет цвет пера.

(Pb) property Mode: TPenMode; TPenMode = (pmBlack, pmWhite, pmNop, pniNot, pmCopy, pmNotCopy, prnMergePenNot, pmMaskPeriNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor) ;

Содержит идентификатор одной из растровых операций, которые определяют взаимодействие пера с поверхностью. Эти операции соответствуют стандартным, определенным в Windows.


 

(Pb) property Style: TPenStyle; TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame) ;

Определяет стиль линии, рисуемой пером. Соответствующие стили также определены в Windows.

(Pb) property Width: Integer;

Содержит значение толщины пера в пикселах.


 

Класс TBrush

TBrush = class(TGraphicsObject)

Инкапсулирует кисть. Первоначально создается белая сплошная (bsSolid) кисть. Свойства класса приведены в таблице:

property Handle: HBrush;

Содержит дескриптор кисти.

(РМ property Color: TColor;

Определяет цвет кисти.

(Pb) property Style: TBrushStyle; TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross) ;

Содержит стиль кисти (фактуру закраски).

property Bitmap: TBitmap;

Содержит битовую карту, определенную пользователем для закраски поверхностей. Если это свойство определено, то Color и Style недействительны.


 

Шрифт, перо и кисть, как правило, используются не самостоятельно, а в составе специального класса, который и будет сейчас рассмотрен.

Класс TCanvas

TCanvas = class(TPersistent)

Этот класс -- сердцевина графической подсистемы Delphi. Он объединяет в себе и "холст" (контекст конкретного устройства GDI), и "рабочие инструменты" (перо, кисть, шрифт) и даже "подмастерьев" (набор функций по рисованию типовых геометрических фигур).

В дальнейшем для обозначения этого класса мы будем пользоваться термином "канва". Сознавая неоднозначность такого перевода, авторы тем не менее считают, что у него наилучшие шансы прижиться.

Канва не является компонентом, но она входит в качестве свойства во многие другие компоненты, которые должны уметь нарисовать себя и отобразить какую-либо информацию.

Дескриптор контекста устройства, над которьм "построена" канва, может быть востребован для различных низкоуровневых операций. Он задается свойством:

property Handle: HDC;

Для рисования канва включает в себя шрифт, перо и кисть:

(р^) property Font: TFont ;

(Pt^ property Pen: TPen;

(РЙ property Brush: TBrush;

Кроме того, можно рисовать и поточечно, получив доступ к каждому пикселу. Значение свойства

property Pixels[X, Y: Integer]: TColor;

соответствует цвету точки с координатами (X,Y).

Канва содержит методы-надстройки над всеми основными функциями рисования GDI Windows и свойства, которые приведены ниже в таблице. При их рассмотрении имейте в виду, что все геометрические фигуры рисуются текущим пером. Те из них, которые можно закрашивать, закрашиваются с помощью текущей кисти. Кисть и перо при этом имеют текущий цвет.

procedure Arc (XI, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer) ;

Метод рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (X1,Y1) -- (X2,Y2); его размеры должны лежать в диапазоне от 2 до 32767 точек. Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X3.Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X4.Y4). Сегмент рисуется против часовой стрелки.

procedure Chord(Xl, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer);

Рисует хорду и заливает отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки определяются, как в методе Arc.

procedure EllipsefXl, Yl, Х2, Y2: Integer) ;

Рисует и закрашивает эллипс, вписанный в прямоугольник (X1.Y1) -- (X2.Y2).

procedure LineTo(X, Y: Integer);

Проводит линию текущим пером из текущей точки в (X,Y).

procedure MoveTo(X, Y: Integer);

Перемещает текущее положение пера (свойство PenPos) в точку (X,Y).

procedure BrushCopy(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor);

Производит специальное копирование. Прямоугольник Source из битовой карты Bitmap копируется в прямоугольник Dest на канве; при этом цвет Color заменяется на цвет текущей кисти (Brush.Color). С помощью этого метода можно нарисовать "прозрачную" картинку. Для этого нужно выбрать соответствующий фону цвет кисти и затем заменить на него фоновый или наиболее часто встречающийся цвет битовой карты (см. Bitmap. TransparentColor).


 

procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect) ;

Производит копирование прямоугольника Source из канвы Canvas в прямоугольник Dest в области самого объекта.

procedure FillRect(const Rect: TRect) ;

Производит заливку прямоугольника (текущей кистью).

procedure FrameRectfconst Rect: TRect);

Производит оконтуривание прямоугольника цветом текущей кисти (без заполнения).

procedure Draw(X, Y: Integer; Graphic: TGraphic) ;

Осуществляет рисование графического объекта Graphic (точнее, вызов метода его рисования) в области с верхним левым углом (X,Y).

procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);

Осуществляет рисование объекта Graphic в заданном прямоугольнике Rect. Если размеры их не совпадают, Graphic масштабируется.

procedure DrawFocusRect(const Rect: TRect);

Производит отрисовку прямоугольной рамки из точек (как на элементе, имеющем фокус ввода). Поскольку метод использует логическую операцию XOR (исключающее ИЛИ), повторный вызов для того же прямоугольника приводит изображение к начальному виду.

procedure FloodFilKX, Y: Integer; Color: TColor; FillStyle: TFillStyle); TFillStyle = (fsSurface, fsBorder) ;

Производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color.

procedure Pie (XI, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integers-

Рисует сектор эллипса, описываемого прямоугольником (X1,Y1) -- (X2,Y2). Стороны сектора лежат на лучах, проходящих из центра эллипса через точки (X3.Y3) и (X4,Y4).

procedure Polygon(const Points: array of TPoint) ;

Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой и внутренняя область закрашивается.

procedure Polyline(const Points: array of TPoint) ;

Строит ломаную линию, используя массив координат точек Points.

procedure Rectangle(XI, Yl, Х2, Y2 : Integer) ;

Рисует прямоугольник с верхним левым углом в (XI ,Y1) и нижним правым в (X2.Y2).

procedure RoundRect (XI, Yl, Х2, Y2, ХЗ, Y3: Integer);

Рисует прямоугольник с закругленными углами. Координаты вершин -- те же, что и в методе Rectangle. Закругления рисуются как сегменты эллипса с размерами осей по горизонтали и вертикали ХЗ и Y3.


 

function. TextHeight(const Text: string): Integer;

Возвращает высоту строки Text в пикселах.

function TextWidth(const Text: string): Integer;

Возвращает ширину строки Text в пикселах.

procedure TextOut(X, Y: Integer; const Text: string);

Производит вывод строки Text. Левый верхний угол помещается в точку канвы (X,Y).

procedure TextRect(Rect: TRect; X, Y: Integer; const Text: stringi ;

Производит вывод текста с отсечением. Как и в TextOut, строка Text выводится с позиции (X,Y); при этом часть текста, лежащая вне пределов прямоугольника Rect, отсекается и не будет видна.

(Ro) property ClipRect: TRect;

Определяет область отсечения канвы. То, что при рисовании попадает за пределы этого прямоугольника, не будет изображено. Свойство доступно только для чтения -- его значение переустанавливается системой в контексте устройства канвы.

property PenPos: TPoint;

Содержит текущую позицию пера канвы (изменяется посредством метода MoveTo).


 

Метод

procedure Refresh;

сбрасывает текущие шрифт, перо и кисть, заменяя их на стандартные, заимствованные из Windows (BLACK.PEN, HOLLOW_BRUSH, SYSTEM.FONT).

Предусмотрено два события для пользовательской реакции на изменение канвы:

property OnChange: TNotifyEvent;

property OnChanging: TNotifyEvent;

Эти события возникают при изменениях свойств и вызовах методов TCanvas, меняющих вид канвы (то есть при любом рисовании. В MoveTo, например, они не возникают). Отличие их в том, что OnChanging вызывается до начала изменений, a OnChange -- после их завершения.

Идентификатор (код) растровой операции при копировании прямоугольных блоков содержится в свойстве

(Pb) property CopyMode: TCopyMode;

TCopyMode = Longint;

и определяет правило сочетания пикселов, копируемых на канву, с ее текущим содержимым. При этом можно создавать разные изобразительные эффекты. В Delphi определены следующие константы кодов: cmBlackness, cmDstInvert, cmMergeCopy, cmMergePaint, cmNotSrcCopy, cmNotSrcErase, cmPatCopy, cmPatInvert, cmPatPaint, cmSrcAnd, cmSrcCopy, cmSrcErase, cmSrcInvert, cmSrcPaint, cmWhiteness.

Все они стандартно определены в Windows, и подробное их описание можно найти в документации по GDI. Значением CopyMode по умолчанию является cmSrcCopy -- копирование пикселов источника поверх существующих.

Использование графики иллюстрируют несколько примеров, имеющихся на дискете, прилагаемой к книге. Обратите внимание на пример MOVLINES -- в нем показано, как создавать и использовать канву для всего экрана. Помимо графических примитивов, таких как линии и фигуры, на канве можно разместить готовые изображения. Для их описания создан класс TGraphic.

 

Класс TGraphic

TGraphic = class(TPersistent)

Этот абстрактный класс является родительским для трех видов изображений, общепринятых в графике Windows -- значка (класс TIcon), метафайла (класс TMetafile) и растровой картинки (класс TBitmap).

Информация о работе Справочник по компонентам Дельфи