Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод. указания СВП_1ч(2006).doc
Скачиваний:
9
Добавлен:
26.11.2019
Размер:
700.93 Кб
Скачать

Пример создания приложения, использующего графические возможности Delphi.

Задание. Создать приложение, которое рисует и перемещает эллипс. Эллипс перемещается по вертикальной линии. При достижении границ формы он останавливается.

Проект должен содержать 2 модуля. В первом модуле (главном) будет описываться класс TForm1, отвечающий за пользовательскую форму. Кроме того, этот класс будет отвечать за перемещение эллипса. Во втором модуле будет описываться класс (TEll), хранящий в себе информацию о геометрической фигуре - эллипс.

Для этого на форме размещаются следующие компоненты:

  1. Страница - компонент PaintBox .

  2. Страница - компонент Timer .

Таймер используется для отсчета интервалов в миллисекундах реального времени. Свойство Enabled включает или отключает таймер. Класс, отвечающий за эту форму, будет описан в первом модуле. Внешний вид формы приведен на рис. 1.

PaintBox

Timer

Рис. 1.

Теперь по команде File – New – Unit необходимо создать второй модуль, в котором будет описываться класс TEll. Класс TEll должен содержать в себе в разделе private поля, хранящие характеристики эллипса, в разделе public – методы, а также свойства, обеспечивающие доступ к полям. Описание класса приведено ниже.

type

TEll = class

private

X, Y, X1, Y1 : integer;

Color : TColor;

Canvas : TCanvas;

public

constructor Create(pCanvas: TCanvas; pX, pY, pX1, pY1: integer; pColor: TColor);

destructor Destroy;

procedure Draw(Visible : boolean);

procedure Move(dX, dY: integer);

property YY:integer read Y;

end;

Конструктор Create отвечает за создание объекта класса Tell и инициализацию его полей. Хорошим тоном считается сначала вызывать конструктор непосредственного родителя.

inherited Create;

X:=pX; Y:=pY;

X1:=pX1; Y1:=pY1;

Color:=pColor;

Canvas:=pCanvas;

Деструктор Destroy уничтожает объект.

inherited Destroy;

Метод Draw рисует или скрывает эллипс в зависимости от значения параметра Visible. Скрыть эллипс можно, нарисовав его цветом фона. В качестве цвета фона был выбран белый цвет.

if Visible then Canvas.Pen.Color:=Color

else Canvas.Pen.Color:=clwhite;

Canvas.Brush.Color:=clwhite;

Canvas.Ellipse(X, Y, X1, Y1);

Метод Move отвечает за один шаг перемещения эллипса. Алгоритм перемещения заключается в следующем. Сначала эллипс скрывается, затем меняются его координаты и далее он рисуется снова, но уже на новом месте.

Draw(False);

X:=X+dX; Y:=Y+dY;

X1:=X1+dX; Y1:=Y1+dY;

Draw(True);

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

Класс TForm1 имеет следующее описание:

TForm1 = class(TForm)

PaintBox1: TPaintBox;

Timer1: TTimer;

procedure FormPaint(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

El:TEll;

{ Public declarations }

end;

Метод FormPaint отвечает за рисование фона и начальное рисование эллипса.

with PaintBox1.Canvas do

begin

Pen.Color:=clwhite;

Pen.Style:=psDot;

Brush.Color:=clwhite;

Rectangle(PaintBox1.ClientRect);

end;

El.Draw(True);

В методе FormCreate происходит создание объекта El.

El:=TEll.Create(PaintBox1.Canvas, 10, 10, 20, 40, clRed);

А в методе FormDestroy происходит его уничтожение.

El.Destroy;

Метод Timer1Timer вызывается через интервал, определенный в свойстве interval, и имеет следующий текст.

if El.YY<=Clientheight-60 then El.Move(0,10)

else timer1.Enabled:=false ;

В нем вызывается метод Move объекта Ell. При достижении границ холста таймер выключается и тем самым движение фигуры останавливается.

Результат работы приложения показан на рис. 2.

Рис. 2.