- •Работа с графикой Компонент Область рисования (tPaintBox)
- •Обработка событий. Создание игры.
- •Работа с графикой Понятие холста
- •Принцип отрисовки изображений в Windows
- •Класс tGraphics
- •Свойства и методы класса tCanvas
- •Свойства холста
- •Наследники класса tGraphics Класс Точечное изображение (tBitmap)
Работа с графикой Компонент Область рисования (tPaintBox)
Этот компонент расположен на панели System. Он не имеет никаких отличительных особенностей и обычно используется для выделения на форме нескольких областей рисования. Такой подход удобен, когда в программе происходит активный вывод графической информации на экран и желательно разделить этот процесс на независимые части. Компонент TPaintBox может охватывать произвольную прямоугольную область формы. Он содержит единственное главное свойство Canvas, имеющее собственную систему координат. Единственное обрабатываемое событие OnPaint генерируется системой Windows автоматически при необходимости перерисовать одну или несколько областей (или их части). Разработчик должен только определить, что будет изображено в каждом объекте класса TPaintBox. Этот компонент также может самостоятельно вызывать процесс перерисовки области холста с помощью метода Paint. Этапы создания графического изображения в Delphi
|
|
procedure TForm1.PBox1Paint(Sender: TObject); {var раздел описания переменных доступных в этой процедуре} begin {Место для записи операторов} end; Также в программе в разделе описания будет добавлена строка type TForm1 = class(TForm) PBox1: TPaintBox; procedure PBox1Paint(Sender: TObject);
|
Цвет (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
! заданные значения могут быть переменными!!!}
Далее, если все фигуры будут рисоваться тем же стилем и цветом, то прописывать их перед каждой фигурой не обязательно. Если все время рисование производится на одном и том же объекте можно использовать оператор With … do …
Тот же пример с использованием оператора 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.