Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекций_2 семестр.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.4 Mб
Скачать

Рисование и закраска Графические компоненты

 

В стандартную библиотеку визуальных компонент Delphi входит несколько объектов, с помощью которых можно придать своей программе совершенно оригинальный вид. Это - TImage (TDBImage), TShape, TBevel.

TImage позволяет поместить графическое изображение в любое место на форме. Этот объект очень прост в использовании - выберите его на странице Additional и поместите в нужное место формы. Собственно картинку можно загрузить во время дизайна в редакторе свойства Picture (Инспектор Объектов). Картинка должна храниться в файле в формате BMP (bitmap), WMF (Windows Meta File) или ICO (icon). (TDBImage отображает картинку, хранящуюся в таблице в поле типа BLOB. При этом доступен только формат BMP.)

Как известно, форматов хранения изображений гораздо больше трех вышеназванных (например, наиболее известны PCX, GIF, TIFF, JPEG). Для включения в программу изображений в этих форматах нужно либо перевести их в формат BMP.

При проектировании следует помнить, что изображение, помещенное на форму во время дизайна, включается в файл .DPR и затем прикомпилируется к EXE файлу. Поэтому такой EXE файл может получиться достаточно большой. Как альтернативу можно рассмотреть загрузку картинки во время выполнения программы, для этого у свойства Picture (которое является объектом со своим набором свойств и методов) есть специальный метод LoadFromFile. Это делается, например,так:  

if OpenDialog1.Execute then Image1.Picture.LoadFromFile(OpenDialog1.FileName);

Важными являются свойства объекта Center и Stretch - оба имеют булевский тип. Если Center установлено в True, то центр изображения будет совмещаться с центром объекта TImage. Если Stretch установлено в True, то изображение будет сжиматься или растягиваться таким образом, чтобы заполнить весь объект TImage.

TShape - простейшие графические объекты на форме типа круг, квадрат и т.п. Вид объекта указывается в свойстве Shape. Свойство Pen определяет цвет и вид границы объекта. Brush задает цвет и вид заполнения объекта. Эти свойства можно менять как во время дизайна, так и во время выполнения программы.

TBevel - объект для украшения программы, может принимать вид рамки или линии. Объект предоставляет меньше возможностей по сравнению с TPanel, но не занимает ресурсов. Внешний вид указывается с помощью свойств Shape и Style.

Свойство объектов Canvas

У ряда объектов из библиотеки визуальных компонент есть свойство Canvas (канва), которое предоставляет простой путь для рисования на них. Эти объекты - TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm, TImage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid. Canvas является в свою очередь объектом, объединяющим в себе поле для рисования, карандаш (Pen), кисть (Brush) и шрифт (Font). Canvas обладает также рядом графических методов : Draw, TextOut, Arc, Rectangle и др. Используя Canvas, Вы можете воспроизводить на форме любые графические объекты - картинки, многоугольники, текст и т.п. без использования компонент TImage,TShape и TLabel (т.е. без использования дополнительных ресурсов), однако при этом Вы должны обрабатывать событие OnPaint того объекта, на канве которого Вы рисуете. Рассмотрим подробнее свойства и методы объекта Canvas.

Свойства Canvas :

Brush Определяет цвет и стиль заполнения замкнутых фигур и фона.

Свойство Brush (кисть) присуще многим оконным объектам, включая Canvas. Его можно читать, чтобы определить цвет и стиль заполнения фона окна. Это свойство только для чтения. Однако, атрибуты объекта Brush можно изменять, используя свойства Color и Style. Кроме того все свойства объекта могут быть изменены методом Assign. Тип TBrush определяет свойства и методы объекта Brush.

Canvas Orientation Определяет обычную (слева направо) и восточную (справа налево) ориентацию канвы и ее координат. Свойство только для чтения.

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

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

При обработке события формы OnPaint это свойство определяет ту часть канвы, вне которой перерисовка не требуется. Использование этого свойства позволяет сократить затраты времени на перерисовку.

CopyMode Определяет режим копирования графического изображения на канву.

Свойство канвы CopyMode определяет режим копирования графического изображения на канву методом CopyRect или при рисовании объекта TBitmap. Используя свойство можно достичь различных эффектов объединения изображений и их комбинирования.

Возможны следующие значения свойства CopyMode (используемые константы определены в модуле Windows):

cmBlackness Заполняет область канвы, в которую производится копирование, черным цветом. Собственное изображение на канве и копируемое изображение игнорируются.

CmDstInvert Инвертирует изображение на канве. Копируемое изображение игнорируется.

CmMergeCopy Комбинирует изображение канвы и копируемое изображение, используя булеву операцию AND. То же, что cmSrcAnd.

CmMergePaint Комбинирует изображение канвы и инверсию копируемого изображения, используя булеву операцию OR.

CmNotSrcCopy Копирует на канву инверсное изображение. Собственное изображение на канве игнорируется.

CmNotSrcErase Комбинирует изображения канвы и копируемого изображения, используя булеву операцию OR, а затем инвертирует результат.

CmPatCopy Копирует шаблон источника на канву. Собственное изображение на канве игнорируется.

CmPatInvert Комбинирует изображение канвы и шаблон источника, используя булеву операцию XOR.

CmPatPaint Комбинирует инверсное изображение источника и его шаблон, используя булеву операцию OR. Затем этот результат комбинирует с изображением канвы, используя булеву операцию OR.

CmSrcAnd Комбинирует изображения канвы и источника, используя булеву операцию AND. То же, что cmMergeCopy.

CmSrcCopy Копирует изображение источника на канву. Собственное изображение на канве игнорируется. Этот режим принят по умолчанию.

CmSrcErase Инвертирует изображение на канве и комбинирует результат с изображением источника, используя булеву операцию AND.

CmSrcInvert Комбинирует изображения канвы и источника, используя булеву операцию XOR. Повторное копирование восстанавливает прежнее изображение на канве.

CmSrcPaint Комбинирует изображения канвы и источника, используя булеву операцию OR.

CmWhiteness Заполняет область канвы, в которую производится копирование, белым цветом. Собственное изображение на канве и копируемое изображение игнорируются.

Font Определяет атрибуты шрифта, которым выводится текст

Свойство Font является объектом типа TFont. Изменение шрифта можно осуществить или созданием нового объекта типа TFont, или изменением свойств Color, Height, Name, Pitch, Size, Style существующего объекта.

Handle Дескриптор канвы

Свойство Handle используется при обращении к функциям API Windows, требующим указания дескриптора окна. Обращение к свойству Handle приводит к созданию дескриптора, если его не было до этого. Поэтому нельзя обращаться к этому свойству при создании компонента или чтении его из потока.

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

Свойство канвы LockCount определяет, сколько раз заблокирована канва для предотвращения эффектов наложения от действия различных нитей многопоточного приложения. Если значение LockCount равно 0, то канва разблокирована. Так что чтение этого свойства позволяет узнать, есть ли блокировка. Увеличение LockCount на единицу производится методом Lock. Метод TryLock устанавливает значение LockCount в 1, если до этого LockCount равнялось 0, и не изменяет LockCount в остальных случаях. Метод Unlock уменьшает LockCount на 1.

Pen Определяет свойства пера, рисующего линии и фигуры.

Свойство канвы Pen определяет атрибуты пера, используемого для рисования линий и фигур. Это свойство является объектом типа. Атрибуты объекта типа определяют цвет, ширину, стиль линий и режим рисования пера. Присваивание свойства Pen может производиться методом Assign.

PenPos Определяет текущую позицию пера.

Свойство канвы PenPos определяет переменной типа TPoint положение пера на канве. Координаты пера, определенные этим свойством, задают начальную точку рисования линии методом LineTo.

Свойство PenPos изменяется методом MoveTo и некоторыми методами рисования (например, методом LineTo). Непосредственная установка PenPos эквивалентна применению метода MoveTo.

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

Свойство канвы Pixels определяет цвет пикселя канвы с координатами X и Y в пределах текущей области ClipRect. Если заданы координаты пикселя вне области ClipRect, то при чтении свойства Pixels возвращается значение -1.

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

Не все устройства поддерживают свойство Pixels. Чтение Pixels для таких устройств возвращает -1. Установка Pixels для подобных устройств не дает никаких результатов.

TextFlags Определяет способ вывода текста на канву.

Свойство канвы TextFlags определяет особенности вывода текста на канву методами TextOut и TextRect. Свойство TextFlags может формироваться как целая комбинация любых следующих констант:

Константа Пояснение

ETO_CLIPPED Выводится только текст, помещающийся в указанной прямоугольной области. В методе TextRect этот флаг устанавливается автоматически. На метод TextOut этот флаг не влияет.

ETO_OPAQUE Текст выводится с непрозрачным цветом фона.

ETO_RTLREADING Строка текста выводится справа налево. Доступно только с версией Windows Mideast (для стран востока).

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

ETO_IGNORELANGUAGE Недокументированный пока флаг Microsoft.

ETO_NUMERICSLOCAL Недокументированный пока флаг Microsoft.

ETO_NUMERICSLATIN Недокументированный пока флаг Microsoft.

Методы Canvas:

Методы для рисования простейшей графики - Arc, Chord, LineTo, Pie, Polygon, PolyLine, Rectangle, RoundRect. При прорисовке линий в этих методах используются карандаш (Pen) канвы, а для заполнения внутренних областей - кисть (Brush).

Методы для вывода картинок на канву - Draw и StretchDraw, В качестве параметров указываются прямоугольник и графический объект для вывода (это может быть TBitmap, TIcon или TMetafile). StretchDraw отличается тем, что растягивает или сжимает картинку так, чтобы она заполнила весь указанный прямоугольник (см. пример к данному уроку).

Методы для вывода текста - TextOut и TextRect. При выводе текста используется шрифт (Font) канвы. При использовании TextRect текст выводится только внутри указанного прямоугольника. Длину и высоту текста можно узнать с помощью функций TextWidth и TextHeight.