- •Введение
- •1. Знакомство со средой программирования BorlandDelphi
- •Некоторые команды редактора. При написании программы можно использовать следующие комбинации клавиш для упрощения набора текста:
- •1.2. Создание программы «Моя первая программа»
- •2. Условные операторы
- •2.1. Теоретические сведения
- •Условные операторы. Условный оператор позволяет выбирать одно из двух действий, причем выбор осуществляется во время выполнения программы. Существует 2 вида условных операторов:
- •2.2. Создание программы «Попадание точки в фигуру»
- •Индивидуальное задание
- •3. Операторы цикла
- •3.1. Теоретические сведения Стандартные функции. Для выполнения часто встречающихся вычислений и преобразования данных в Object Pascal существуют стандартные функции.
- •Отладка программы. При построении сложных программ могут возникать ошибки. Их принято делить на 3 группы:
- •3.2. Создание программы «Степенные ряды»
- •Индивидуальное задание
- •4. Тип данных массив
- •4.1. Теоретические сведения
- •Типичные действия с массивом. Вывод массива; ввод массива; поиск максимального или минимального элемента массива; поиск в массиве заданного элемента; сортировка массива.
- •4.2. Создание программы «Работа с массивом»
- •Индивидуальное задание
- •5. Графические примитивы
- •5.2. Создание программы «Графические примитивы»
- •Индивидуальное задание
- •Стандартные диалоговые окна. Для вывода различных сообщений можно использовать стандартные диалоговые окна Delphi. Диалоговые окна запускаются командой:
- •6.2. Создание программы «Редактор текста»
- •Индивидуальное задание
- •7. Работа с базами данных
- •7.1. Теоретические сведения
- •7.2. Создание программы «Список студентов»
- •Индивидуальное задание
- •8. Выполнение курсового проекта
- •8.1. Варианты курсовых работ
- •Заключение
- •Список рекомендуемой литературы
Индивидуальное задание
Создать демонстрационную программу, используя шаблон в соответствии с номером варианта.
1 |
2 |
3 |
4 | ||||
|
|
|
|
|
|
|
|
5 |
6 |
7 |
8 | ||||
|
|
|
|
|
|
|
|
9 |
10 |
11 |
12 | ||||
|
|
|
|
|
|
|
|
13 |
14 |
15 |
16 | ||||
|
|
|
|
|
|
|
|
17 |
18 |
19 |
20 |
Итоги
В четвёртой теме были изучены: объявление новых типов данных; генератор случайных чисел; изучение структуры «массив»; алгоритмы операций с массивами.
При создании демонстрационной программы были получены навыки работы со следующими командами: Randomize, Random и визуальными компонентами: элемент фигура StringGrid;
5. Графические примитивы
Цель: знакомство с графическими примитивами; печать изображения; мультипликация; формирование программируемого изображения.
5.1. Теоретические сведения
Графические примитивы. При создании программы может возникнуть ситуация, когда, используя видимые элементы Delphi, не удается сформировать нужное изображение (это могут быть чертежи, иллюстрации, графики и т. п.). В этом случае можно использовать программирование изображения.
Вся поверхность окна представляет собойхолст, на который программа может выводить графику. Этот холст задается свойством Canvas, позволяющим выводить графические примитивы (точки, линии, окружности, прямоугольники и т. п.) и задавать их характеристики: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации. Холст представляет собой систему координат с началом в верхнем левом углу – таким образом, увеличение координаты X идет слева направо, а координаты Y сверху вниз (рис. 5.1). Холст можно представить как набор пикселей – начало координат имеет координаты (0,0), а правый нижний угол окна – (Client.Width, Client.Height).
Для рисования графических объектов используют карандаш (Pen), а для заполнения замкнутых областей – кисть (Brush). Свойства инструментов Pen и Brush приведены в табл. 5.1.
Таблица 5.1 | |
Свойство |
Определение |
Карандаш – Pen | |
Color |
Цвет линии |
Width |
Толщина линии |
Style |
Стиль линии |
Mode |
Режим отображения |
Кисть Brush | |
Color |
Цвет закрашиваемой области |
Style |
Стиль заполнения области |
Если требуются другие цвета, то можно воспользоваться функцией RGB(Red,Green,Blue), в качестве параметров которой передаются значения соответствующего цвета (красного, зеленого, синего) в диапазоне от 0 (значение отсутствует) до 255 (цвет полностью насыщен).
Пример
RGB(255,0,0) – даст чисто красный цвет (clRed);
RGB(100,100,100) – даст оттенок серого;
RGB(255,255,255) – даст чисто белый цвет (clWhite).
Также полезным может оказаться свойство Pen.Width, устанавливающее толщину рисуемой линии в пикселях. Дополнительную справку по остальным свойствам карандаша и кисти можно получить из контекстной справки Delphi.
Таблица 5.2 | |||
Константа |
Цвет |
Константа |
Цвет |
clAqua |
Бирюзовый |
clMedGray |
Средне-серый (Delphi 6) |
clBlack |
Чёрный |
clManeyGreen |
Цвет мяты (Delphi 6) |
clBlue |
Синий |
clNavy |
Тёмно-синий |
clCream |
Кремовый (Delphi 6) |
clOlive |
Оливковый |
clDkGray |
Тёмно-серый (clGray) |
clPurple |
Пурпурный |
clFuchsia |
Фиолетовый |
clRed |
Красный |
clGray |
Серый (clDkGray) |
clSilver |
Серебристый (clLtDark) |
clGreen |
Зелёный |
clSkyBlue |
Лазурный (Delphi 6) |
clLime |
Салатный |
clTeal |
Тёмно-голубой |
clLtGray |
Светло-серый (clSilver) |
clWhite |
Белый |
clMaroon |
Тёмно-бордовый |
clYellow |
Жёлтый |
Рассмотрим графические примитивы: TextOut – вывод текста, Pixels – вывод точки, LineTo – вывод линии, PolyLine – вывод ломаной, PolyGon – многоугольник, Rectangle – прямоугольник, RoundRec – прямоугольник с закругленными краями, Ellipse – эллипс, Arc – дуга и Pie – сектор.
TextOut(X,Y:Integer; const Text: String) – вывод текста Text в прямоугольник, имеющий координаты верхнего левого угла X,Y. Стиль (Style), цвет (Color), название шрифта (Name), размер шрифта (Size) определяются объектом Font.
Пример
Font.Name := ‘Times New Roman’; {Название шрифта Times New Roman}
Font.Size := 14; {Размер шрифта 14}
Font.Color := clBlue; {Цвет шрифта Синий (clBlue)}
Font.Style := [fsBold, fsItalic, fsUnderLine, fsStrikeOut];
{Настройка стиля шрифта указывается в квадратных скобках через запятую – fsBold – жирный, fsItalic – курсив, fsUnderLine – подчеркнутый, fsStrikeOut – зачеркнутый}
Для настройки фона выводимого текста необходимо настроить цвет кисти (Brush.Color), например системный цвет clBtnFace позволит выводить фон текста таким же, как у окна.
Pixels[X,Y:Integer] := цвет – вывод точки с координатами X, Y указанным переменной цвет цветом.
Замечание. Все последующие процедуры чертятся цветом, установленным для инструмента «карандаш» – Pen.Color.
LineTo(X,Y:Integer) – рисует линию от текущей точки окна (позиция курсора) до точки с координатами X и Y. Чтобы установить курсор в определенную точку, необходимо использовать процедуру MoveTo[X,Y:Integer], которая перемещает курсор в точку с координатами X и Y.
Пример
MoveTo(0,0);
LineTo(ClientWidth,ClientHeight);
В примере будет проведена линия от левого верхнего угла окна до правого нижнего угла.
PolyLine(array of TPoint) – рисует ломаную кривую по точкам, указанным в массиве точек, соединяя первую со второй, вторую с третьей и т. д. Точки массива могут быть перечислены как непосредственно в процедуре PolyLine, так и описаны ранее. Использование процедуры будет понятно из примеров.
Примеры
Точки описаны в процедуре:
PolyLine([Point(10,20),Point(20,10),Point(30,20)]);
будет построена ломаная с вершинами в точках, указанных в стандартной переменной Point, с координатами (10,20), (20,10), (30,20).
Для описания массива точек назначим массив PArray, который опишем в разделе описания переменных. Затем необходимо заполнить массив значениями точек и, наконец, вызвать процедуру PolyLine:
var
PArray : array[1..3] of TPoint;
begin
… {Описание программы}
PArray[1].X := 10;
PArray[1].Y := 20;
PArray[2].X := 20;
PArray[2].Y := 10;
PArray[3].X := 30;
PArray[3].Y := 20;
PolyLine(PArray);
Здесь также будет построена ломаная с теми же координатами вершин, что и в предыдущем случае.
Второй пример, несмотря не громоздкость, в случае многократного использования PolyLine позволит разделить текст, описывающий точки, и текст построения изображения, что более структурирует текст программы.
PolyGon(array of TPoint) – отличается от предыдущей процедуры тем, что соединяет последнюю точку массива с первой, т. е. получаем замкнутую фигуру.
Замечание. Все замкнутые фигуры чертятся цветом, установленным для инструмента «карандаш» – Pen.Color, и заполняются цветом, определенным для инструмента «кисть» – Brush.Color.
Rectangle(X1,Y1,X2,Y2:Integer) – прямоугольник, имеющий левый верхний угол с координатами (X1,Y1) и нижний правый угол с координатами (X2,Y2). Если длина X1–Y1 окажется равной X2–Y2, то получится квадрат.
RoundRec(X1,Y1,X2,Y2,X3,Y3:Integer) – вычерчивает прямоугольник (X1,Y1,X2,Y2), но со cкругленными углами, размер скругления определяется X3 – диаметром скругления по X и Y3 – диаметром скругления по Y (рис. 5.2).
Ellipse(X1,Y1,X2,Y2:Integer) – эллипс, вписанный в прямоугольник с координатами (X1,Y1,X2,Y2); если это квадрат, то получаем окружность.
Arc(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer) – вычерчивает дугу эллипса, вписанного в прямоугольник с вершинами (X1,Y1,X2,Y2); X3,Y3 – определяют точку начала дуги; X4,Y4 – определяют точку конца дуги. Начальная (конечная) точка – это точка пересечения границы эллипса с прямой, проведенной из центра эллипса в точки с координатами (X3,Y3) и (X4,Y4). Дуга вычерчивается против часовой стрелки от начальной точки к конечной.
Pie(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer) – строит сектор. Строится по тем же правилам, что и дуга, но отличается тем, что сектор – замкнутая фигура, т. е. имеет цвет заполнения. Дуга и сектор изображены на рис 5.3.
Печать изображения. Печать изображения – то же, что и вывод на экран. Принтер, как и форма, имеет свойство Canvas. Здесь действует та же система координат и те же инструменты «карандаш» и «кисть». Отличие состоит лишь в следующем: при печати надо сообщить принтеру, чтобы он начал и закончил печать. Для этого надо поместить в текст программы все графические вызовы, которые должны распечатать изображение между командами принтера: Printer.BeginDoc и Printer.EndDoc. Как только принтер получит команду Printer.EndDoc, он сразу отпечатает изображение.
Для печати необходимо настроить принтер с помощью стандартного окна настройки. Для этого Delphi имеет вкладку наиболее популярных диалогов – Dialogs. На этой вкладке есть и диалоги настройки свойств принтера (значок ) и свойств печати (значок). Для вызова этих диалогов необходимо выполнить командуExecute. Например, команда PrinterDialogSetup1.Execute откроет стандартное окно настройки принтера (считается, что на форму помещён элемент настройки печати с именем PrinterDialog1).
Если при создании программы планируется, что изображение будет печататься, необходимо предусмотреть умножение всех размеров используемых объектов на константу, определяющую различие между размерами окна и размерами бумаги. Для этих целей необходимо использовать свойства принтера Printer.PageWidth и Printer.PageHeight, дающие размеры бумаги – ширину и высоту соответственно. Получить коэффициенты пересчета можно, поделив самые короткие размеры печатаемой страницы на самые короткие размеры отображаемой формы:
.
Таким образом, при печати изображения останется только умножать все размеры на эту константу.
Мультипликация. Под мультипликацией обычно понимают передвижение объекта или изменение его свойств (формы, цвета и т. п.). Сделать движущийся объект очень просто – достаточно вывести изображение, затем через некоторое время стереть его и вывести новое. Подобрав время между выводом изображений, можно добиться плавного изменения изображения.
Для создания задержки в Delphi служит невидимый элемент Timer, вкладка System, значок . «Невидимый компонент» означает, что во время выполнения программы этот элемент виден не будет, поэтому на стадии разработки окна данный значок можно поместить в любое место. Этот элемент имеет всего 3 свойства: имя (Name), интервал (Interval) и запрещение/разрешение работы (Enabled). Таким образом, необходимо настроить интервал перерисовки (значение свойства Interval, заданное в миллисекундах) и разрешить перерисовку (свойство Enabled установить в true). Для запуска событий, которые должны перерисовываться, необходимо обратиться к свойству onTimer. Картинка будет перерисовываться с частотой, заданной свойством Interval.
Если требуется, чтобы картинка двигалась, при её программировании необходимо ввести базовую точку и все координаты рассчитывать от этой точки. Обычно это делается так: вводятся константы по координатам, которые должны изменяться, и все соответствующие координаты изображения увеличиваются на это значение.
Пример
Пусть необходимо передвигать окружность с координатами (5,5,10,10) по горизонтали. Введём переменную базовой точки по координате X и назовем её dx. Рисование окружности будет осуществляться командой: Ellipse(dx+5,5,dx+10,10);
Затем в нужный момент старое изображение затирается цветом фона, изменяются координаты базовой точки и прорисовывается картинка с новыми координатами.