- •Часть I
- •Содержание
- •Лабораторная работа №1. Интегрированная среда разработки Delphi. Обзор основных компонентов.
- •Пример создания простейшего Windows-приложения.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №2. Способы организации файлового ввода-вывода. Динамические массивы.
- •Переменные TextFileName и GraphFileName указывает путь к файлу.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №3. Обработка исключительных ситуаций в Delphi.
- •Вывод сообщений
- •Пример создания приложения с обработкой ис.
- •Содержание отчета.
- •Контрольные вопросы.
- •Лабораторная работа №4. Изучение графических возможностей Delphi.
- •Пример создания приложения, использующего графические возможности Delphi.
- •Содержание отчета.
- •Контрольные вопросы.
- •Литература.
Пример создания приложения, использующего графические возможности Delphi.
Задание. Создать приложение, которое рисует и перемещает эллипс. Эллипс перемещается по вертикальной линии. При достижении границ формы он останавливается.
Проект должен содержать 2 модуля. В первом модуле (главном) будет описываться класс TForm1, отвечающий за пользовательскую форму. Кроме того, этот класс будет отвечать за перемещение эллипса. Во втором модуле будет описываться класс (TEll), хранящий в себе информацию о геометрической фигуре - эллипс.
Для этого на форме размещаются следующие компоненты:
Страница - компонент PaintBox .
Страница - компонент 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.