4
июня

Урок 5: Рисование и закраска

   Автор: admin   в Уроки Delphi

Урок 5: Рисование и закраска

  1. Обзор
  2. Из данной статьи Вы узнаете о том, какие возможности есть в Delphi
    для создания приложений, использующих графику; как использовать компоненты
    для отображения картинок; какие средства есть в Delphi для оформления программы.
    Кроме того, познакомитесь с важным свойством Canvas, которое предоставляет
    доступ к графическому образу объекта на экране.

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

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

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

    При проектировании следует
    помнить, что изображение, помещенное на форму во время дизайна, включается
    в файл .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.

  5. Свойство объектов Canvas
  6. У ряда объектов из библиотеки
    визуальных компонент есть свойство 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 -кисть,
    является объектом со своим набором свойств:

    Bitmap – картинка
    размером строго 8×8, используется для заполнения (заливки) области на экране.

    Color - цвет заливки.

    Style – предопределенный
    стиль заливки; это свойство конкурирует со свойством Bitmap – какое свойство
    Вы определили последним, то и будет определять вид заливки.

    Handle – данное свойство
    дает возможность использовать кисть в прямых вызовах процедур Windows API
    .

    ClipRect -
    (только чтение) прямоугольник, на котором происходит графический вывод.

    CopyMode -
    свойство определяет, каким образом будет происходить копирование (метод
    CopyRect) на данную канву изображения из другого места: один к одному,
    с инверсией изображения и др.

    Font – шрифт,
    которым выводится текст (метод TextOut).

    Handle – данное
    свойство используется для прямых вызовов Windows API.

    Pen – карандаш,
    определяет вид линий; как и кисть (Brush) является объектом с набором свойств:

    Color – цвет линии

    Handle – для прямых
    вызовов Windows API

    Mode – режим вывода:
    простая линия, с инвертированием, с

    выполнением исключающего
    или и др.

    Style – стиль вывода:
    линия, пунктир и др.

    Width – ширина линии
    в точках

    PenPos – текущая
    позиция карандаша, карандаш рекомендуется перемещать с помощью метода MoveTo,
    а не прямой установкой данного свойства.

    Pixels – двухмерный
    массив элементов изображения (pixel), с его помощью Вы получаете доступ
    к каждой отдельной точке изображения (см. пример к данному уроку).

    Методы Canvas:

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

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

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

  7. Объект TPaintBox
  8. На странице System Палитры Компонент есть объект TPaintBox, который
    можно использовать для построения приложений типа графического редактора
    или, например, в качестве места построения графиков (если, конечно, у Вас
    нет для этого специальных компонент третьих фирм). Никаких ключевых свойств,
    кроме Canvas, TPaintBox не имеет, собственно, этот объект является просто
    канвой для рисования. Важно, что координаты указателя мыши, передаваемые
    в обработчики соответствующих событий (OnMouseMove и др.), являются относительными,
    т.е. это смещение мыши относительно левого верхнего угла объекта TPaintBox,
    а не относительно левого верхнего угла формы.

Содержание урока 5:

Обзор

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

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

Объект TPaintBox

В первом примере (проект SHAPE.DPR, рис.1) показано, как во время выполнения
программы можно изменять свойства объекта TShape. Изменение цвета объекта
(событие OnChange для ColorGrid1):

procedure TForm1.ColorGrid1Change(Sender:
TObject);

begin

Shape1.Brush.Color:=ColorGrid1.ForeGroundColor;

end;

Во втором примере (проект PIXELS.DPR,
рис.2) показано, как осуществить доступ к отдельной точке на изображении
(на канве). По нажатию кнопки “Fill” всем точкам изображения присваивается
свой цвет:

procedure TForm1.Button1Click(Sender: TObject);

var

i, j : Longint;

begin

Button1.Enabled:=False;

with Canvas do

for i:=1 to Width do begin

Application.ProcessMessages;

for j:=1 to Height do

Pixels[i,j]:=i*j;

end;

Button1.Enabled:=True;

end;


В третьей программе (проект
DRAW.DPR, рис.3) приведен пример использования методов, выводящих изображение
- Draw и StretchDraw:

Прорисовка изображений происходит
в обработчике события OnPaint для формы:

procedure TForm1.FormPaint(Sender: TObject);

begin

with Canvas do begin

Draw(0,0, Image1.Picture.BitMap);

StretchDraw(Rect(250,0,350,50),Image1.Picture.BitMap)

end;

end;

Tags: , , , , ,

Дата создания: Среда, июня 4, 2008 - 21:27 и находится в категории Уроки Delphi. Вы можете отслеживать ответы через RSS 2.0. Вы можете ответить.

Ответить

Вы должны быть в системе для комментирования.