Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с графикой.doc
Скачиваний:
5
Добавлен:
04.12.2018
Размер:
305.66 Кб
Скачать

Работа с графикой Компонент Область рисования (tPaintBox)

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

Компонент TPaintBox может охватывать произвольную прямоугольную область формы. Он содержит единственное главное свойство Canvas, имеющее собственную систему координат. Единственное обрабатываемое событие OnPaint генерируется системой Windows автоматически при необходимости перерисовать одну или несколько областей (или их части). Разработчик должен только определить, что будет изображено в каждом объекте класса TPaintBox.

Этот компонент также может самостоятельно вызывать процесс перерисовки области холста с помощью метода Paint.

Этапы создания графического изображения в Delphi

  1. Создайте на форме объект области рисования. По умолчанию созданный объект получил имя PaintBox1.

  2. Задайте необходимое имя этого объекта, например PBox1.

  3. Определите размер и местоположения объекта на форме. Можно менять размер и положение с помощью мыши, а можно в окне Object Inspector меняя значения Width, Height – ширина и высота области рисования, Top и Left – координаты верхнего левого угла созданного объекта относительно формы, в которой расположен созданный объект.

  4. На вкладке Events в окне Object Inspector выберем событие, при котором должен появляться рисунок. Возьмем событие OnPaint. Т.е. рисоваться будет каждый раз, когда произошло изменение видимой области объекта. Например, свернули/развернули окно формы. Двойной щелчок по полю приведет к созданию процедуры TForm1.PBox1Paint. В программе добавится процедура

procedure TForm1.PBox1Paint(Sender: TObject);

{var раздел описания переменных доступных в этой процедуре}

begin

{Место для записи операторов}

end;

Также в программе в разделе описания будет добавлена строка

type

TForm1 = class(TForm)

PBox1: TPaintBox;

procedure PBox1Paint(Sender: TObject);

  1. Допишите в процедуру операторы рисования на форме.

Цвет (Color), стиль (Style) и толщину линий (Width) определяет свойство Pen. См. таблицу 3.

Цвет закраски внутренних областей геометрических фигур, определяет свойством Brush См. таблицу 4.

Методы рисования представлены в таблице 6.

Например, чтобы нарисовать прямоугольник на объекте PBox1 надо обратиться к методу Rectangle.

PBox1.Canvas.Brush.Color:=clWhite; {Внутренний цвет - белый}

PBox1.Canvas.Brush.Style:=bsSolid; {Способ заполнения - сплошной}

PBox1.Canvas.Pen.Color:=clRed; {Цвет границы фигуры - красный}

PBox1.Canvas.Pen.Style:=psSolid; {Стиль линии - сплошной}

PBox1.Canvas.Pen.Width:=3; {Ширина линии - 3 пиксела}

PBox1.Canvas.Rectangle(10, 10, 50, 100); {Прямоугольник с координатами 10,10 – 50, 100

! заданные значения могут быть переменными!!!}

Далее, если все фигуры будут рисоваться тем же стилем и цветом, то прописывать их перед каждой фигурой не обязательно. Если все время рисование производится на одном и том же объекте можно использовать оператор Withdo

Тот же пример с использованием оператора With:

With PBox1.Canvas do

begin

Brush.Color:=clWhite;

Brush.Style:=bsSolid;

Pen.Color:=clRed;

Pen.Style:=psSolid;

Pen.Width:=3;

Rectangle(10,10,50,100);

end;

Составим процедуру так, чтобы в объекте PBox1 рисовался фрагмент шахматной доски (3 строки, 5 столбцов) выкрашенной в зеленые и желтые клетки. Размер шахматной доски будет определяться переменной d.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls;

type

TForm1 = class(TForm)

PBox1: TPaintBox;

procedure PBox1Paint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

d: integer=30; {задаем размер клетки}

implementation

{$R *.dfm}

procedure TForm1.PBox1Paint(Sender: TObject);

var i, j, x1, y1, x2, y2:integer;

begin

PBox1.Width:=d*5; {Изменяем ширину объекта PBox1 в соответствии с размером клетки}

PBox1.Height:=d*3; {Изменяем высоту объекта PBox1 в соответствии с размером клетки}

With Pbox1.Canvas do

begin

Pen.Color:=clBlack; Pen.Style:=psSolid;

Pen.Width:=0;

Brush.Style:=bsSolid;

for i:=1 to 3 do {три строки}

for j:=1 to 5 do {пять столбцов}

begin

{изменим цвет заливки в соответствии с нечетностью суммы i+j }

if odd(i+j) then Brush.Color:=clYellow

else Brush.Color:=clGreen;

x1:=d*(j-1);

x2:=d*j;

y1:=d*(i-1);

y2:=d*i;

Rectangle (x1, y1, x2, y2);

end;

end;

end;

end.