ГРАФИЧЕСКИЙ ИНСТРУМЕНТАРИЙ
Богатство изобразительных возможностей Windows связано с так называемым дескриптором контекста графического устройства DC (Device Context) и тремя входящими в него инструментами - шрифтом, пером и кистью. В Delphi созданы специализированные классы-надстройки, существенно упрощающие использование графических инструментов Windows: для контекста - класс TCanvas,для шрифта - TFont, для пера - ТРеп и для кисти - TBrush.
Связанные с этими классами объекты автоматически создаются для всех видимых элементов и становятся доступны программе
через свойства Canvas, Font, Pen и Brush.
16.4.1. Класс TFont
С помощью класса TFont создается объект-шрифт для любого графического устройства (экрана, принтера, плоттера и т. п.).
Свойства класса:
property Color: TColor;
| Цвет шрифта
| property Charset: TFontCharSet;
| Набор символов. Для русскоязычных программ это свойство обычно имеет значение DEFAULTCHARSET или russian charset. Используйте значение OEMCHARSET для отображения текста MS-DOS (альтернативная кодировка)
| property FontAdapter: IChangeNotifier;
| Поставляет информацию о шрифте в компоненты ActveX
| property Handle:hFont;
| Дескриптор шрифта. Используется при непосредственном обращении к API-функциям Windows
| property Height: Integer;
| Высота шрифта в пикселях экрана
| property Name: TFontName;
| Имя шрифта. По умолчанию имеет значение MS
Sans Serif
| property Pitch: TFontPitch;
| Определяет способ расположения букв в тексте: значение fpFixed задает моноширинный текст, при котором каждая буква имеет одинаковую ширину; значение fpVariabel определяет ропорциональный текст, при котором ширина буквы зависит от ее начертания; fpDefault определяет ширину, принятую для текущего шрифта
| property PixelPerInch: Integer;
| Определяет количество пикселей экрана на один дюйм реальной длины. Это свойство не следует изменять, т. к. оно используется системой для обеспечения соответствия экранного шрифта шрифту принтера
| property Size: Integer;
| Высота шрифта в пунктах (1/72 дюйма). Изменение этого свойства автоматически изменяет свойство Height и наоборот.
| property Style: TFontStyles;
| Стиль шрифта. Может принимать значение как комбинация следующих признаков: fsBold (жирный), fsltalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый)
| Для некоторых случаев может оказаться полезным метод
procedure Assign(Source: TPersistent);
с помощью которого значения свойств шрифтового объекта source присваиваются свойствам текущего шрифта. Метод не изменяет свойство pixeiperinch, поэтому его можно использовать для создания шрифта принтера по экранному шрифту и наоборот.
16.4.2. Класс ТРеп
С помощью класса треп создается объект-перо, служащий для вычерчивания линий. Свойства класса:
property Color: TColor;
| Цвет вычерчиваемых пером линий
| property Handle: Inte
ger;
| Дескриптор пера. Используется при непосредственном обращении к API-функциям Windows
| property Mode: TPenMode;
| Определяет способ взаимодействия линий с фоном (см.ниже)
| property Style: TPenStyle;
| Определяет стиль линий (см. рис. 16.2). Учитывается только для толщины линий 1 пиксель. Для толстых линий стиль всегда ps Solid (сплошная)
| property Width: Integer;
| Толщина линий в пикселях экрана
| Свойство Mode может принимать одно из следующих значений:
| pmBlack
| Линии всегда черные. Свойства Color и Style игнорируются
| pmWhite
| Линии всегда белые. Свойства Color и Style игнорируются
| pmNop
| Цвет фона не меняется (линии не видны)
| pmNot
| Инверсия цвета фона. Свойства Color и Style игнорируются
| pmCopy
| Цвет линий определяется свойством Color пера
| pmNotCopy
| Инверсия цвета пера. Свойство Style игнорируется
| pmMergePenNot
| Комбинация цвета пера и инверсионного цвета фона
| pmMaskPenNot
| Комбинация общих цветов для пера и инверсионного цвета фона. Свойство Style игнорируется
| pmMergeNotPen
| Комбинация инверсионного цвета пера и фона
| pmMaskNotPen
| Комбинация общих цветов для инверсионного цвета пера и фона. Свойство Style игнорируется
| pmMerge
| Комбинация цветов пера и фона
| pmNotMerge
| Инверсия цветов пера и фона. Свойство Style игнорируется
| pmMask
| Общие цвета пера и фона
| pmNotMask
| Инверсия общих цветов пера и фона
| pmXor
| Объединение цветов пера и фона операцией XOR
| pinNotXor
| Инверсия объединения цветов пера и фона операцией XOR
| Стили линий показаны на рис. 16.2.
Рис. 16.2. Стили линий
16.4.3. Класс TBrush
Объекты класса TBrush (кисти) служат для заполнения внутреннего пространства замкнутых фигур.
Свойства класса:
property Bitmap: TBitmap;
| Содержит растровое изображение, которое будет использоваться кистью для заполнения. Если это свойство определено, свойства Color и Style игнорируются
| property Color: TColor;
| Цвет кисти
| property Handle: Integer;
| Дескриптор кисти. Используется при не посредственном обращении к API- функциям Windows
| property Style: TBrushStyle;
| Стиль кисти (см. рис. 16.3)
|
16.4.4. Класс TCanvas
Этот класс создает “канву”, на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса ЕСаnvas автоматически создаются для всех видимых компонентов, которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, pen, Brush, а также многочисленные методы, использующие эти объекты.
Свойства класса:
property Brush: TBrush; property ClipRect: TRect;
| Объект-кисть Определяет текущие размеры области, нуждающейся в прорисовке
| property CopyMode: TCopyMode;
| Устанавливает способ взаимодействия растрового изображения с цветом фона
| property Font: TFont;
| Объект-шрифт
| property Handle: Integer;
| Дескриптор канвы. Используется при непосредственном обращении к API-функциям Windows
| property LockCount: In
tegers;
| Счетчик блокировок канвы. Увеличивается на единицу при каждом обращении к методу Lock и уменьшается на единицу при обращении к Unlock
| property Pen: TPen;
| Объект-перо
| property PenPos:TPoint;
| Определяет текущее положение пера в пикселях относительно левого верхнего угла канвы
| property Pixels[X,Y:Integer]: TColor;
| Массив пикселей канвы
| Свойство copyMode используется при копировании части одной канвы (источника) в другую (приемник) методом copyRect и может иметь одно из следующих значений:
cmBlackness
| Заполняет область рисования черным цветом
| cmDestInvert
| Заполняет область рисования инверсным цветом фона
| cmMergeCopy
| Объединяет изображение на канве и копируемое изображение операцией and
| cmMergePaint
| Объединяет изображение на канве и копируемое изображение операцией OR
| cmNotSrcCopy
| Копирует на канву инверсное изображение источника
| cmNotSrcErase
| Объединяет изображение на канве и копируемое изображение операцией OR и инвертирует полученное
| cmPatCopy
| Копирует образец источника
| cmPatInvert
| Комбинирует образец источника с изображением на канве с
помощью операции XOR
| cmPatPaint
| Комбинирует изображение источника с его образцом с помощью операции OR, затем полученное объединяется с изображением на канве также с помощью OR
| cmSrcAnd
| Объединяет изображение источника и канвы с помощью операции AND
| cmSrcCopy
| Копирует изображение источника на канву
| cmSrcErase
| Инвертирует изображение на канве и объединяет результат с изображением источника операцией AND
| cmSrcInvert
| Объединяет изображение на канве и источник операцией XOR
| cmSrcPaint
| Объединяет изображение на канве и источник операцией OR
| cmWhitness
| Заполняет область рисования белым цветом
| С помощью свойства pixels все пиксели канвы представляются в виде двухмерного массива точек. Изменяя цвет пикселей, можно прорисовывать изображение по отдельным точкам.
Методы класса:
procedure Arc(X1, Y1, X2, Y2, ХЗ, Y3, Х4, Y4: Integer);
| Чертит дугу эллипса в охватывающем прямоугольнике (Xl,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, Y3), а конец - на пересечении с лучом из центра в точку (Х4, Y4). Дуга чертится против часовой стрелки (см. рис. 16.4, а)
| procedure BrushCopy
(const Dest: TRect;
Bitmap: TBitmap;
const Source: TRect;
Color: TColor);
| Копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен заменяться на цвет кисти канвы. Метод введен для совместимости с ранними версиями Delphi. Вместо него следует пользоваться классом Т Image List
| procedure Chord(XI,
Yl, X2, Y2, X3, Y3,
| Чертит сегмент эллипса в охватывающем прямоуголь нике (XI, У1) - (X2, Y2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении с лучом из центра в точку (X4, Y4). Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой (см. рис. 16.4, б)
| procedure CopyRect (Dest: TRect; Canvas: TCanvas;Source: TRect);
| Копирует изображение Source канвы Canvas в участок Dest текущей канвы. При этом разнообразные специальные эффекты достигаются с помощью свойства CopyMode
| procedure Draw(X, Y:Integer; Graphic:TGraphic);
| Осуществляет прорисовку графического объекта Graphic так, чтобы левый верхний угол объекта расположился в точке (X, Y)
| procedure DrawFocusRect (const Rect:TRect);
| Прорисовывает прямоугольник с помощью операции XOR, поэтому повторная прорисовка уничтожает ранее вычерченный прямоугольник. Используется в основном для прорисовки нестандартных интерфейсных элементов при получении ими фокуса ввода и при потере его
| procedure Ellipse(XI, Yl, X2,
Y2: Integers;
| Чертит эллипс в охватывающем прямоугольнике (XI, Yl) - (X2, Y2). Заполняет внутреннее пространство эллипса текущей кистью
| procedure FillRect(const Rect: TRect);
| Заполняет текущей кистью прямоугольную область Rect, включая ее левую и верхнюю границы, но не затрагивая правую и нижнюю границы
| procedure Flood-
Fill(X, Y: Integer;
Color: TColor; Fill Style: TFillStyle);
| Производит заливку канвы текущей кистью. Залив
ка начинается с точки (X, Y) и распространяется вовсе стороны от нее. Если FillStyle=fsSurface, заливка распространяется на все соседние точки с цветом Color. Если FillStyle=fsBorder, наоборот, заливка прекращается на точках с этим цветом
| procedure FrameRect(const Rect: TRect);
| Очерчивает границы прямоугольника Rect текущей кистью толщиной в 1 пиксель без заполнения внутренней части прямоугольника
| procedure LineTo(X,
Y: Integer);
| Чертит линию от текущего положения пера до точки
(X,Y)
| procedure Lock;
| Блокирует канву в многопоточных приложениях для предотвращения использования канвы в других по токах команд
| procedure MoveTo(X,Y: Integer);
| Перемещает перо в положение (X, Y) без вычерчивания линий
| procedure Pie(XI,
Yl, X2, Y2, X3, Y3,
X4, Y4: Longint);
| Рисует сектор эллипса в охватывающем прямоугольнике (XI, Yl) - (X2, Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении случом из центра в точку (X4, Y4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром (см. рис. 16.4, в)
| procedure Polygon.
(Points: array of TPoint);
| Вычерчивает пером многоугольник по точкам, заданным в массиве Points. Конечная точка соединяется с начальной и многоугольник заполняется кистью. Без заполнения используйте - Polyline
| procedure Polyline
(Points: array of
TPoint);
| Вычерчивает пером ломаную прямую по точкам, заданным в массиве Points
| procedure Rectan
gle(XI, Yl, X2, Y2:
Integer);
| Вычерчивает и заполняет прямоугольник (XI, Yl) -S(X2, Y2). Для вычерчивания без заполнения используйте FrameRect или Polyline
| procedure Refresh;
| Устанавливает в канве умалчиваемые шрифт и кисть
| procedure RoundRect(Xl, Yl, X2,Y2, X3, Y3: Inte ger);
| Вычерчивает и заполняет прямоугольник (XI,Yl)- (X2, Y2) со скругленными углами. Прямоугольник (XI, Yl) - (X3, Y3) определяет дугу эллипса для округления углов (см. рис. 16.4, г)
| procedure Stretch Draw (const Rect:TRect; Graphic:
TGraphic);
| Вычерчивает и при необходимости масштабирует графический объект Graphic так, чтобы он полностью занял прямоугольник Rect
| function TextExtent
(const Text:String): TSize;
| Возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text
| function TextHeight
(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:
String);
| Выводит текстовую строку Text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (х, Y). Если при этом какая-либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна
| function TextWidth
(const Text:String): Integer;
| Возвращает ширину прямоугольника, охватывающего текстовую строку Text
| function TryLock:
Boolean;
| Пытается заблокировать канву. Если она не заблокирована другим потоком команд, - True, в противном случае ничего не делает и возвращает False
| procedure Unlock;
| Уменьшает на 1 счетчик блокировок канвы
| 16.4.4.1. Дополнительные возможности API-функций
Замечу, что все богатство изобразительных возможностей Windows далеко не исчерпывается набором свойств и методов класса TCanvas: этот класс инкапсулирует лишь наиболее популярные приемы работы с чертежными инструментами. В этом разделе перечисляются некоторые функции Windows, которые не инкапсулирует класс TCanvas и которые способны значительно разнообразить текстовый вывод (именно он наиболее обеднен узкими рамками TCanvas).
Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...
|
Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...
|
Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...
|
Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...
|
Интуитивное мышление Мышление — это психический процесс, обеспечивающий познание сущности предметов и явлений и самого субъекта...
Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...
Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри:
Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...
|
БИОХИМИЯ ТКАНЕЙ ЗУБА В составе зуба выделяют минерализованные и неминерализованные ткани...
Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...
ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...
|
|