Создание приложения "Часы"

Отображение графики с помощью Canvas, представляющей собой область компонента, на которой можно рисовать или отображать готовые изображения. Операторы, применяемые в программе создания аналоговых часов, ее интерфейс и алгоритм решения на языке Delphi.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 20.01.2016
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

КУРСОВАЯ РАБОТА

по дисциплине: «Технология разработки программных продуктов»

тема: Создание приложения «Часы»

Введение

Delphi - это комбинация нескольких важнейших технологий:

Высокопроизводительный компилятор в машинный код

Объектно-ориентированная модель компонент

Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов

Масштабируемые средства для построения баз данных.

Основной упор модели в Delphi делается на то, чтобы максимально производительно использовать код. Это позволяет очень быстро разрабатывать приложения, так как уже существуют заранее подготовленные объекты. А так же вы можете создавать свои собственные объекты, без каких-либо ограничений. Язык Delphi -- строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Информатика - это наука о способах представления, накопления, передачи и обработки информации. Она служит для помощи другим наукам и вместе с математикой снабжает их методами исследований и обработки информации.

Современная информатика имеет несколько основных направлений:

разработка методов и алгоритмов автоматического сбора, хранения, поиска и передачи информации,

разработка методов и алгоритмов обработки и преобразования информации,

разработка технологий и электронно-вычислительной техники позволяющих развивать информатик.

ЭВМ - это машина для автоматической обработки информации. Самым распространённым видом компьютеров является IBM PC - совместимые, их мощность постоянно увеличивается, а области применения постоянно расширяются. Однако возможности этих компьютеров при обработке информации всё же ограничены и не во всех ситуациях их применение оправдано.

Delphi язык программирования высокого уровня обеспечивающий работу в диалоговом режиме, ввод и редактирование исходной программы с выдачей сообщений об ошибках, вывод на дисплей или печатающее устройство текста исходной программы или её фрагмента, анализ, проверку и выполнение операторов языка.

Язык нашел широкое применение, как среди учащихся, так и в серьёзной научной деятельности благодаря своей относительной простоте и широкому кругу возможностей. Широко применяется в военных ВУЗах страны, в частности ВАВПВО ВС РФ, для разработки программ расчёта и анализа работы военной техники и вооружения.

Проектирование данной курсовой работы требует рассмотрения одного из методов проектирования и программирования при решении военно-прикладных задач: анализ текста программы. В основу курсовой работы входит программа, созданная на языке программирования DELPHI. Курсовая работа содержит также алгоритм решения поясняющей программы. Алгоритм является одним из необходимых элементов при создании программ на любом из алгоритмических языков

Целью курсовой работы является создание программы «Часы».

Исходя из целей, можно поставить перед собой следующие задачи:

Ознакомиться с объектно-ориентированной средой Delphi;

Узнать о работе и свойствах компонентов программы;

Разработать приложение «Часы».

Курсовая работа состоит из 3 этапов:

Разбор теоретического материала по Delphi.

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

Инструкция пользователя программы и код программы.

1.Отображение графики с помощью Canvas

Канва Canvas не является компонентом. Но поскольку многие компоненты, в частности, формы, имеют канву и канва предоставляет возможность выводить различную графическую информацию, то некоторые начальные сведения о канве все-таки целесообразно дать. Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Она содержит свойства и методы, существенно упрощающие графику Delphi. Все сложные взаимодействия с системой спрятаны для пользователя, так что рисовать в Delphi может человек, совершенно не искушенный в машинной графике. Каждая точка канвы имеет координаты X и Y. Система координат канвы, как и везде в Delphi, имеет началом левый верхний угол канвы. Координата X возрастает при перемещении слева направо, а координата Y -- при перемещении сверху вниз. Координаты измеряются в пикселях. Пиксель -- это наименьший элемент поверхности рисунка, с которым можно манипулировать. Важнейшее свойство пикселя -- его цвет. Канва имеет свойство Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например, Canvas.Pixels[10,20] соответствует цвету пикселя, 10-го слева и 20-го сверху. С массивом пикселей можно обращаться как с любым свойством: изменять цвет, задавая пикселю новое значение, или определять его цвет по хранящемуся в нем значению. Например, Canvas.Pixels[10,20] := 0 или Canvas.Pixels[10,20] := clBlack -- это задание пикселю черного цвета. Свойство Pixels можно использовать для рисования на канве. Давайте попробуем нарисовать по пикселям график синусоиды на канве формы. Для этого в обработчик события формы OnPaint (прорисовка) можно вставить следующий код:

procedure TForm1.FormPaint(Sender: TObject);

var

X,Y: real; // координаты функции

PX,PY: longint; // координаты пикселей

Begin

Color := clWhite;

for PX := 0 to ClientWidth do

begin

{X -- аргумент графика,

соответствующий пикселю с координатой РХ}

X := PX*4*Pi/ClientWidth;

Y:=Sin(X);

{PY -- координата пикселя,

соответствующая координате Y}

PY: =trunc(ClientHeight - (Y+1)*ClientHeight/2);

{Устанавливается черный цвет выбранного

пикселя (О яркости)}

Canvas.Pixels [PX, PY] := 0;

end;

end;

Выполните это тестовое приложение, и вы увидите результат, представленный на Рис. 10 а. График синусоиды получился, хотя и не очень хороший, т.к. разбивается на отдельные точки -- пиксели.

а)

б)

Рис. 10.График синусоиды, построенный по пикселям (а) и линиями (б).

Канва -- объект класса TCanvas имеет множество методов, которые позволяют рисовать графики, линии, фигуры с помощью свойства Pen -- перо. Это свойство является объектом, в свою очередь имеющим ряд свойств. Одно из них уже известное вам свойство Color -- цвет, которым наносится рисунок. Второе свойство -- Width (ширина линии). Ширина задается в пикселях. По умолчанию ширина равна 1.

Свойство Style определяет вид линии. Это свойство может принимать следующие значения:

psSolid

Сплошная линия

psDash

Штриховая линия

psDot

Пунктирная линия

psDashDot

Штрих- пунктирная линия

psDashDotDot

Линия, чередующая штрих и два пунктира

psClear

Отсутствие линии

Сплошная линия, но при Width > 1 допускающая цвета, отличные от палитры Windows

У канвы имеется свойство PenPos типа TPoint .Это свойство определяет в координатах канвы текущую позицию пера. Перемещение пера без прорисовки линии, т.е. изменение PenPos, производится методом канвы MoveTo(X,Y). Здесь (X, Y) -- координаты точки, в которую перемещается перо. Эта текущая точка становится исходной, от которой методом LineTo(X,Y) можно провести линию в точку с координатами (X,Y). При этом текущая точка перемещается в конечную точку линии и новый вызов LineTo будет проводить точку из этой новой текущей точки.

Давайте попробуем нарисовать пером график синуса из предыдущего примера. В данном случае обработчик события формы OnPaint может иметь вид:

Procedure TForm1.FormPaint(Sender: TObject);

var

X,Y: real; // координаты функции

PX,PY: longint; // координаты пикселей

begin

Color:=clWhite;

Canvas.MoveTo(0,ClientHeight div 2);

For PX: =0 to ClientWidth do

Begin

{X - аргумент графика,

соответствующий пикселю с координатой РХ}

X := PX*4*Pi/ClientWidth;

Y := Sin(X);

{PY -- координата пикселя,

соответствующая координате Y}

PY := trunc(ClientHeight - (Y+1)*ClientHeight/2);

{Проводится линия на графике}

Canvas.LineTo(PX,PY);

end;

end;

Результат работы приложения в этом варианте вы можете видеть на рис. 10 б. Как видите, качество графика существенно улучшилось.

Перо может рисовать не только прямые линии, но и фигуры. Полный список методов канвы, использующих перо, см. во встроенной справке Delphi. А пока в качестве примера приведем только один из них -- Ellipse, который рисует эллипс или окружность. Он объявлен как procedure Ellipse(X1, Y1, Х2, Y2: Integer); где параметры X1, Х2, Y1, Y2 определяют координаты прямоугольника, описывающего эллипс или окружность. Например, оператор Canvas.Ellipse(10, 40, 20, 50); нарисует окружность с диаметром 10 и с координатами центра (15, 45).

Фигуры в общем случае рисуются не пустыми, а закрашенными с помощью свойства канвы Brush -- кисть. Свойство Brush является объектом, имеющим в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style определяет шаблон заполнения (штриховку). По умолчанию значение Style равно bsSolid, что означает сплошное закрашивание цветом Color.

У пера Pen имеется еще одно свойство, которое мы пока не рассматривали. Это свойство -- Mode (режим). По умолчанию значение Mode = pmCopy. Это означает, что линии проводятся цветом, заданным в свойстве Color. Но возможны и другие режимы, в которых учитывается не только цвет Color, но и цвет соответствующих пикселей фона. Наиболее интересным из этих режимов является режим pmNotXor -- сложение с фоном по инверсному исключающему ИЛИ. Если задан этот режим, то повторное рисование той же фигуры на том же месте канвы убирает ранее нарисованное изображение и восстанавливает цвета пикселей, которые были до первого изображения фигуры.

Эту особенность режима pmNotXor можно использовать для создания простенькой анимации. Достаточно нарисовать нечто, затем стереть нарисованное, перерисовать немного измененным -- и рисунок будет представляться ожившим.

Попробуйте сделать сами простенькую мультипликацию -- движущуюся окружность. Начните новое приложение и в раздел implementation вставьте объявление

var X,Y: integer;

Тем самым вы введете глобальные переменные X и Y -- текущие координаты изображения.

В событие формы OnPaint вставьте операторы

Canvas.Brush.Color := clWhite;

Color := clWhite;

Canvas.Pen.Mode := pmNotXor;

Первый из этих операторов задает белый цвет кисти Brush. Значит ваша окружность будет закрашена внутри белым цветом. Второй оператор задает белый цвет фона поверхности формы. Третий оператор устанавливает режим пера pmNotXor, который позволит вам стирать прежнее изображение прежде, чем нарисовать новое.

Даже самая простая мультипликация нуждается в синхронизации. Иначе скорость движения будет определяться быстродействием компьютера. Поэтому перенесите на форму компонент Timer -- таймер со страницы System. Можете посмотреть там его подробное описание. А пока задайте его свойство Interval равным, например, 30 (это время выдержки в миллисекундах, но реальное время выдержки будет больше) и установите свойство Enabled равным false (это означает, что таймер не будет запускаться автоматически в момент запуска приложения).

В обработчик события этого компонента OnTimer вставьте операторы

// Стирание прежнего изображения

Canvas.Ellipse(Х-5, Y, X+5, Y-1Q);

Inc(X);

// Рисование нового изображения

Canvas.Ellipse(Х-5, Y, X+5, Y-10);

// Останов при достижении конца формы

if (X >= ClientWidth-20) then

Timer1.Enabled := false;

Первый из этих операторов рисует окружность в том месте, где она была нарисована ранее, т.е. стирает прежнее изображение. Далее увеличивается на единицу функцией Inc текущая координата X и изображение окружности рисуется в новой позиции. Последний оператор останавливает изображение у края формы.

Теперь перенесите на форму кнопку Button и в обработчик щелчка на ней поместите операторы

Х:=10;

Y:=100;

Canvas.Ellipse(X-5, Y, X+5, Y-10);

Timer1.Enabled:=true;

Первые два оператора задают начальные координаты окружности. Третий оператор рисует окружность в ее начальном положении, а четвертый -- запускает таймер.

Оттранслируйте приложение, запустите его на выполнение, щелкните на кнопке. Вы увидите изображение окружности, перемещающееся по форме слева направо. А дальше уж подключите вашу фантазию и преобразуйте это не слишком интересное приложение во что-нибудь более увлекательное.

На канве можно отображать не только программно создаваемые изображения, но и изображения, хранящиеся в графических файлах. Только сама канва не имеет метода загрузки изображения из файла. Поэтому загружать файл надо в какой-нибудь другой графический объект, способный воспринимать информацию графических файлов. А затем переписывать изображение из этого объекта на канву с помощью метода канвы Draw. Его описание:

procedure Draw(X, Y: Integer; Graphic: TGraphic);

Здесь параметры Х и Y определяют координаты левого верхнего угла размещения изображения на канве, a Graphic -- объект, хранящий информацию. В качестве такого объекта может выступать, например, объект типа TBitMap, предназначенный для хранения битовых матриц. Давайте посмотрим, как все это выглядит на практике.

Откройте новое приложение, перенесите на форму компонент OpenPictureDialog со страницы Dialogs (это компонент диалога открытия графических файлов) и кнопку Button. Разместите OpenPictureDialog в любом месте формы, так как этот компонент невизуальный, а кнопку разместите внизу формы. В обработчик щелчка на кнопке занесите код:

procedure TForm1.Button1Click(Sender: TObject);

var

BitMap:TBitMap;

begin

// Выбор пользователем графического файла

If OpenPictureDialog1.Execute then

Begin

// Создание объекта BitMap типа TBitMap

BitMap:=TBitMap.Create;

// Загрузка в BitMap выбранного графического файла

BitMap.LoadFromFile(OpenPictureDialog1.FileName);

// Перенос изображения на канву формы

Canvas.Draw(10, 10, BitMap);

// Уничтожение объекта BitMap

BitMap.Free;

end;

end;

Этот код создает временный объект типа TBitMap с именем BitMap. Затем вызывается диалог открытия графического файла OpenPictureDialog1 и, если пользователь выбрал файл, то он загружается в BitMap методом LoadFromFile. Затем методом Draw загруженное изображение копируется на канву в область, с координатами левого верхнего угла (10, 10). После этого временный объект BitMap уничтожается.

Запустите ваше приложение и щелкните на его кнопке. Вы увидите, что можете загрузить любой графический файл типа .bmp и он отобразится на канве формы (см. рис. 10 а). Графические файлы вы можете найти в каталоге Images. В Delphi 5 и 4 он обычно расположен в каталоге ...\program files\Common Files\Borland Shared. В Delphi 3 он расположен в каталоге ...\program files\Borland\Delphi 3, а в Delphi 1 -- в каталоге Delphi 16. В каталоге Images имеется, в частности, подкаталог \Images\Splash\16Color\, в

котором хранится файл, загруженный в примере рис. 1.

а)

б)

Рис. 1. Изображение на канве графического файла (а) и его стирание (б) при перекрытии другим окном.

Создано приложение для просмотра графических файлов. Не закрывая своего приложения, перейдите в какую-нибудь другую программу, например, вернитесь в Delphi.

Если же окно вашего приложения перекрывалось только частично, то вернувшись в свое приложение вы, возможно, увидите результат, подобный представленному на рис. 1 б.

Вы видите, что если окно какого-то другого приложения перекрывает на время окно вашего приложения, то изображение, нарисованное на канве формы, портится. Посмотрим, как можно устранить этот недостаток.

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

Перерисовка может производиться разными способами в зависимости от приложения. В нашем примере, можно было бы вынести объявление переменной BitMap (оператор var BitMap: TBitMap) за пределы приведенной выше процедуры, т.е. сделать эту переменную глобальной, разместив непосредственно в разделе implementation. Оператор BitMap.Free можно было бы перенести в обработчик события формы OnDestroy, происходящего в момент закрытия приложения. Тогда в течение всего времени выполнения вашего приложения вы будете иметь копию картинки в компоненте BitMap и вам достаточно ввести в обработчик события OnPaint формы всего один оператор:

Canvas.Draw(10, 10, BitMap);

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

Помимо рассмотренного метода Draw канва имеет еще метод копирования CopyRect:

procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);

Метод копирует указанную параметром Source область изображения в канве источника изображения Canvas в указанную параметром Dest область данной канвы. Тип TRect, характеризующий прямоугольные области Source и Dest. Например, оператор

Canvas.CopyRect(MyRect2, Bitmap.Canvas, MyRect1);

копирует на канву формы в область MyRect2 изображение из области MyRect1 канвы компонента Bitmap.

Копирование методом CopyRect производится в режиме, установленном свойством CopyMode. По умолчанию это свойство имеет значение cmSrcCopy, что означает просто замену изображения, содержащегося ранее в области Dest, на копируемое изображение. Другие возможные значения CopyMode позволяют комбинировать изображения, но их рассмотрение выходит за рамки данной книги.

Этими основными сведениями о выводе графической информации на канву мы ограничимся. В целом же канва -- сложный объект, обладающий еще многими свойствами и методами. Но это требует развернутого обсуждения, выходящего за рамки данной книги. В следующей книге серии «Все о Delphi» эти вопросы будут рассмотрены подробнее.

1.1 Постановка задачи

Разработка программы создания аналоговых часов включает в себя следующие этапы:

- Прорисовка часовой стрелки

- Прорисовка минутной стрелки

- Прорисовка секундной стрелки

- Синхронизация с реальным временем

1.2 Совет

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

Давайте теперь посмотрим, как изменился наш Менеджер проектов (рис. 4). Как видите, имя проекта изменилось на HelloWorld, а имя модуля на MainModule.

Рис. 4. Обновленный менеджер проектов.

Теперь перейдите в папку, куда вы сохранили проект, и посмотрите, какие файлы там присутствуют. На компакт-диске это папка \ Примеры \ Глава 5 \ Hello World. Давайте посмотрим на содержимое этих файлов.

HelloWorld.cfg -- файлы с расширением cfg, содержат конфигурацию проекта.

HelloWorld.dof -- файлы с расширением dof, содержат опции проекта.

HelloWorld.dpr -- файлы с расширением dpr, это сам проект. В этом файле находятся описание используемых в проекте модулей и описание процедуры инициализации программы. Его можно использовать и для написания кода. В будущем мы научимся писать код в этом модуле.

HelloWorld.res -- файлы с расширением res, содержат ресурсы проекта, например такие, как иконки, курсоры и др.

-MainModule.pas -- файлы с расширением pas содержат исходный код модулей.

-MainModule.dfm -- файлы с расширением dfm, содержат визуальную информацию о форме.

-MainModuIe.ddp -- файлы с расширением ddp, определяют вспомогательные файлы модуля.

MainModule.dcu -- файл с расширением dcu, представляет откомпилированный модуль проекта. Когда компилируется программа, все модули проекта собираются в один и получается один программный файл. У вас пока не может быть этого файла, потому что вы еще не производили компиляцию своего проекта.

Файлы исходных кодов (с расширением pas) -- это текстовые файлы, которые мы будем редактировать в редакторе кода. Файлы визуальных форм (с расширением dfm) создаются автоматически, и в них будет храниться информация о том, что находится на форме, а также настройки самой формы.

Откройте этот файл в текстовом редакторе (например, в Блокноте), и вы увидите примерно следующее:

*object Forml:*TForml

Left = 231

Top = 163

Width = 426

Height = 300

Caption = 'Hello world'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif

Font. Style = '[]

OldCreateOrder = False

PixelsPerlnch =96

TextHeight = 13

End

Первая строка идентифицирует объект, его имя и тип. Потом идет перечисление свойств объекта и значения, которые им присвоены. Описание свойств заканчивается ключевым словом end.

Если у вас возникла проблема с открытием формы, вы можете открыть файл визуальной формы в текстовом редакторе и подправить это свойство. Это может потребоваться, когда на форме есть компонент, который соединяется с базой данных. Если соединение активно и база недоступна, то при открытии формы Delphi будет пытаться соединиться с базой данных и при неудачном соединении форма может не отобразиться. В этом случае нужно открыть такой файл в текстовом редакторе и отредактировать свойства соединения с базой. Можно отключить соединение или подправить путь к базе данных.

А теперь давайте вернемся к нашей программе Hallo World, которую мы должны написать. Сначала посмотрим, что у нас уже есть. В принципе, мы ничего особого не сделали, но у нас уже есть готовое окно, которое можно превратить в программу. Для этого нужно скомпилировать проект. Для выполнения компиляции выберите из меню пункт Project | Compile HelloWorld (Проект | Компилировать HelloWorld). Если вы выбирали в астройках Delphi показ окна состояния компиляции, то увидите окно, которое показание на рис.5.

Рис. 5. Результат компиляции.

Как видите, нет никаких сообщений, предупреждений или ошибок. Еще бы, ведь мы еще ничего не делали и не успели испортить созданную для нас заготовку. Программа скомпилирована. Просто нажмите кнопку ОК, чтобы закрыть это окно.

Теперь перейдите в папку, где вы сохранили проект. Там появится запускной файл HelloWorld.exe. Запустите его, и вы увидите окно, как показано на рис. 6. Как видите, перед нами пустое окно, т. е. программа почти готова, хотя мы еще вообще ничего не делали. Для завершения поставленной задачи нам нужно только изменить заголовок окна на Hello world и все.

На языке C++ такая простая программа описывалась бы с такими подробностями на протяжении 20--30 страниц. И это не шутка.

Рис. 6. Программа в запущенном виде.

Итак, осталось изменить заголовок. Для этого вспоминаем ООП. В Delphi все -- объекты, а значит, и окно программы тоже объект. Заголовок окна -- это скорей всего свойство окна. Для того чтобы изменить это свойство, нужно перейти в объектный инспектор (вкладка Properties), найти свойство Caption (Заголовок) и ввести в его поле ввода слово Hello world (рис. 7). После этого можно нажать клавишу <Enter> или просто перейти на другую строку с другим свойством.

Теперь давайте запустим нашу программу. Для этого можно снова скомпилировать ее и запустить файл. Однако на этот раз мы будем действовать по другому. Выберите из меню Run (Выполнить) пункт Run (или нажмите на клавиатуре клавишу <F9>). Delphi сразу откомпилирует и запустит готовую программу. Как видите, программирование не настолько страшно, как его расписывают. Совет

Заведите себе привычку перед каждой компиляцией сохранять весь проект (File | Save All). Обидно будет, если полдня тяжелой работы пропадет даром от какой-нибудь внештатной ситуации. А они бывают, особенно если вы установите в среду Delphi компоненты с ошибками. Поэтому лучше лишний раз сохраниться, чем пол-дня восстанавливать проделанную ранее работу.

Рис. 7. Изменение свойств в объектном инспекторе.

В принципе, на этом можно было бы остановиться и рассмотреть код модуля главной формы. Однако перед этим необходимо рассмотреть свойства проекта и изучить правила, по которым ими можно управлять. Выберите пункт меню Project | Options (Проект | Настройки), и вы увидите окно, как показано на рис. 8. Окно разбито на множество вкладок, и с некоторыми из них мы познакомимся сейчас, а остальные оставим на будущее. Слишком много информации ни к чему хорошему не приведет, тем более что нам пока большинство настроек ненужно.

На первой вкладке Forms (Формы) вы можете настраивать формы проекта. Вверху есть выпадающий список Main form (Главная форма). Здесь можно выбрать форму, которая будет являться главной для активного приложения.

У нас только одна форма, Formi, которая на данный момент является активной (находится в стадии редактирования), поэтому она будет главной.

Чуть ниже расположены два поля со списком. Слева находится поле Autocreate forms -- автоматически создаваемые формы. При запуске программы все описанные здесь формы будут инициализироваться автоматически.

Справа находится поле Available forms -- доступные формы. В этом списке будут находиться формы, которые не будут создаваться автоматически, но доступны проекту. Такие формы пользователь обязан инициализировать самостоятельно. Между списками расположены кнопки, с помощью которых можно перемещать имена форм из одного списка в другой, и обратно.

Рис. 8. Окно свойств проекта.

Теперь перейдем на вкладку Applications (Приложения). Здесь вы можете настраивать следующие поля.

1)Title -- заголовок, который будет отображаться в панели задач.

2)Help file -- имя файла помощи.

3)Icon -- иконка приложения. По умолчанию используется иконка Delphi, но вы можете ее изменить, нажав на кнопку Load Icon (Загрузить иконку).

4)Target file extension -- расширение результирующего файла. Если здесь ничего не указано, то запускаемый программный файл будет иметь стандартное расширение ехе. Вы можете указать любое другое значение, но файл от этого не изменится. Это будет тот же самый программный файл, только ему присвоится другое расширение. Такое действие равносильно простому переименованию файла после компиляции.

Следующая вкладка -- Version Info (Информация о версии). Если установить флажок Include version information in project (Включить информацию о версии в проект), то в запускаемый программный файл будет встроена информация о версии программы. На этой же вкладке вы можете указать номер версии, сборки и выпуска (рис. 9).

На этом рассмотрение работы с проектом завершено. В следующем разделе будет рассмотрен исходный код, который сгенерирован Delphi для нашего проекта. Не смотря на то, что он "пустой", кое-какая информация присутствует и с ней нужно разобраться уже сейчас, пока мы не перешли к рассмотрению более сложных программ.

Рис. 9. Вкладка Version Info окна настроек проекта.

2. Математическое описание

Для решения данной задачи необходимо составить ее математическое описание.

Одним из возможных вариантов решения является следующий:

Константа R-радиус циферблата

2.т - переменная времени, т = Now()- реальное время

3.после чего реальное время отображается в аналоговом виде:

ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(Today)*6;

4.Прорисовка реального времени, циферблата, часовой, минутной и секундной стрелок часов.

5.Закрытие программы.

2.1 Алгоритм решения

Для исполнительных устройств создаются алгоритмы. Алгоритм представляет собой упорядоченную последовательность действий приводящих к решению поставленной задачи, то есть последовательность предписаний исполнителю. Число этих предписаний конечно. Исполнитель должен неукоснительно выполнять данные предписания, чтобы достичь желаемого результата. При этом поставленная задача решается за определенное число шагов.

При написании любой программы возникает необходимость в разработке алгоритма решения поставленной задачи. Его роль очень важна. Ведь он математически и логически описывает структуру программы, логические операции, выполняющиеся в процессе решения задачи, также он является точным описанием, определяющим вычислительные процессы, которые происходят в программе и ведут к ожидаемому результату.

Для решения задачи, поставленной на курсовое проектирование, мною был разработан нижеприведенный алгоритм. Данный алгоритм является однозначным и результативным.

2.2 Операторы, применяемые в программе

В процессе написания программы мною были использованы следующие операторы и управляющие конструкции языка Delphi:

Var - оператор объявления переменной

<,>,<> - операторы сравнения

+, -, /, * - математические операторы

While- Оператор цикла

Ellipse - построение окружности

Canvas - вырисовка объекта

round - oкругление до целого

DrawClock -прорисовка текущих положений стрелок часов

2.3 Разработка интерфейса

Интерфейс для данной программы выполнен с помощью интегрированной среды разработки Delphi 6.0, он включает в себя несколько компонентов оформления форм. Наиболее функциональным и значимыми является невизуальный компонент Timer. Данный компоненты является стандартными для операционной системы Microsoft Windows 2000/XP и присутствуют во множестве популярных программ.

Рис. 2. Интерфейс курсового проекта

3. Программа на языке Delphi

unit clock2_;

interface

uses

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

Dialogs, ExtCtrls;

type

TForm1 = class(TForm)

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

// эти объявления вставлены вручную

procedure Vector(x0,y0,a,l: integer);

procedure DrawClock;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses

DateUtils; // для доступа к SecondOf,

// MinuteOf и HourOf

const

R = 75 ; // радиус циферблата часов

var

x0,y0: integer; // центр циферблата

ahr,amin,asec: integer; // положение стрелок (угол)

// инициализация формы

procedure TForm1.FormCreate(Sender: TObject);

var

t: TDateTime;

begin

// зададим размер формы

// в соответствии с размером циферблата

ClientHeight := (R+30)*2;

ClientWidth := (R+30)*2;

x0 := R+30;

y0 := R+30;

t := Now();

// положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(Today)*6;

Timer1.Interval := 1000; // период сигнал от таймера 1 сек

Timer1.Enabled := True; // пуск таймера

end;

// вычерчивает вектор заданной длины из точки (x0,y0)

procedure TForm1.Vector(x0,y0: integer; a, l: integer);

// x0,y0 - начало вектора

// a - угол между осью x и вектором

// l - длина вектора

const

GRAD = 0.0174532; // коэффициент пересчета угла из градусов в радианы

var

x,y: integer; // координаты конца вектора

begin

Canvas.MoveTo(x0,y0);

x := Round(x0 + l*cos(a*GRAD));

y := Round(y0 - l*sin(a*GRAD));

Canvas.LineTo(x,y);

end;

// рисует стрелки

procedure TForm1.DrawClock;

var

t: TDateTime;

begin

// шаг секундной и минутной стрелок 6 градусов,

// часовой - 30.

// стереть изображение стрелок

Canvas.Pen.Color := clBtnFace;

Canvas.Pen.Width :=3;

// часовую

Vector(x0,y0, ahr, R-20);

// минутную

Vector(x0,y0, amin, R-15);

// секундную

Vector(x0,y0, asec, R-7);

t := Now();

// новое положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(t)*6;

// нарисовать стрелки

// часовая стрелка

Canvas.Pen.Width := 3;

Canvas.Pen.Color := clBlack;

Vector(x0,y0, ahr, R-20);

// минутная стрелка

Canvas.Pen.Width := 2;

Canvas.Pen.Color := clBlack;

Vector(x0,y0, amin, R-15);

// секундная стрелка

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clYellow;

Vector(x0,y0, asec, R-7);

end;

// прорисовка циферблата и начальных стрелок

procedure TForm1.FormPaint(Sender: TObject);

var

x,y: integer; // координаты маркера на циферблате

a: integer; // угол между OX и прямой (x0,yo) (x,y)

h: integer; // метка часовой риски

bs: TBrushStyle; // стиль кисти

pc: TColor; // цвет карандаша

pw: integer; // ширина карандаша

begin

bs := Canvas.Brush.Style;

pc := Canvas.Pen.Color;

pw := Canvas.Pen.Width;

Canvas.Brush.Style := bsClear;

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clBlack;

a:=0; // метки ставим от 3-х часов, против

// часовой стрелки

h:=3; // угол 0 градусов - это 3 часа

// циферблат

while a < 360 do

begin

x:=x0+Round( R * cos(a*2*pi/360));

y:=x0-Round( R * sin(a*2*pi/360));

Form1.Canvas.MoveTo(x,y);

if (a mod 30) = 0 then

begin

Canvas.Ellipse(x-2,y-2,x+3,y+3);

// цифры по большему радиусу

x:=x0+Round( (R+15) * cos(a*2*pi/360));

y:=x0-Round( (R+15) * sin(a*2*pi/360));

Canvas.TextOut(x-5,y-7,IntToStr(h));

dec(h);

if h = 0 then h:=12;

end

else Canvas.Ellipse(x-1,y-1,x+1,y+1);

a:=a+6; // 1 минута - 6 градусов

end;

// восстановить карандаш кисть

Canvas.Brush.Style := bs;

Canvas.Pen.Width := pw;

Canvas.Pen.Color := pc;

DrawClock;

end;

// прорисовка текущих положений стрелок часов

procedure TForm1.Timer1Timer(Sender: TObject);

begin

DrawClock;

end;

end.

Заключение

canvas графика приложение часы

В данной курсовой работе был разработан алгоритм и программа для создания аналоговых часов. В итоге проделанной работы можно сказать, что среда разработки Delphi обладает широкими возможностями для решения задач практически любой сложности. Значит, эффективность работы ЭВМ вполне оправдывает затраченные на них расходы и ресурсы. Естественно, не трудно предположить, что развитие ЭВМ нисколько не замедлится и некогда не прекратится. Очевидно, что новейшие ЭВМ будут постоянно внедрятся в различные сферы деятельности человека и конечно же Вооруженные Силы Российской Федерации не исключение.

Считаю, что в процессе выполнения работы все цели были достигнуты: блок-схема и программа на Delphi выполнены верно. Полученный результат достигается правильно а алгоритм его получения прозрачен. Визуальная природа Delphi позволяет сразу наблюдать результаты действий при настройке свойств объектов. Отсюда можно сделать вывод о дальнейшей необходимости изучения Delphi и совершенствованию навыков работы на ПЭВМ.

Список литературы

Методические рекомендации по оформлению и выполнению курсовой работы. Часть 1. Смоленск, ВУ ВПВОВС РФ.

Delphi. Павлов А. Техническая книга, 2010 г.

Справочник по стандартизации в радиоэлектроники ЕСКД. Воениздат, 2009г.

ГОСТ 19428-74.

Методические рекомендации и задания по выполнении расчетно-графических работ.

Приложение

Запускаем программу. Созданные нами часы запустились.

Рис. Интерфейс курсового проекта

Размещено на Allbest.ru


Подобные документы

  • Область применения компьютерной графики. Работа с графикой в Delphi, обращение к свойству Canvas-компонентов. Холст для рисования Canvas - перевернутая система координат. Свойства и методы приложения. Простое приложение, иллюстрирующее работу с графикой.

    курсовая работа [968,7 K], добавлен 23.03.2015

  • Создание приложения для просмотра графических файлов. Компоненты, объекты и операторы для отображения графической информации в библиотеке Delphi. Канва как область компонента для рисования и отображения изображений. Рисование пером, закрашивание кистью.

    методичка [98,1 K], добавлен 19.06.2011

  • Особенности разработки и представления проекта программы, представляющей собой аналоговые часы с циферблатом, часовой, минутной и секундной стрелкой. Применение MS Visual Studio 2010, языка С++ для ее написания и компилирования. Специфика библиотеки MFC.

    курсовая работа [440,2 K], добавлен 17.03.2014

  • Изучение особенностей создания алгоритмов вычислительных задач. Визуальное программирование стандартных компонентов среды программирования Delphi. Технология создания компонента Delphi для решения производственной задачи. Выполнение блок-схемы алгоритма.

    курсовая работа [638,0 K], добавлен 30.01.2015

  • Создание программы для вычисления суммы элементов массива. Проектирование приложения, которое бы переводило минуты в часы или часы и минуты в минуты. Написание HTML-страницы для работы с базой данных автобусов и водителей, интерфейс приложения PhpMyAdmin.

    учебное пособие [1,9 M], добавлен 25.05.2015

  • Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.

    курсовая работа [2,8 M], добавлен 27.01.2010

  • Аналитический обзор сред программирования: Qt 5.3.0, Delphi, Builder C++ и Visual Studio C++. Разработка программы "Интелектуальное фортепиано", с помощью которой можно проиграть, записать, воспроизвести мелодию. Создание пользовательского интерфейса.

    курсовая работа [296,1 K], добавлен 13.04.2015

  • Особенности и тонкости программирования в среде Delphi. Специфика перехода от алгоритмического решения к непосредственной программной реализации на языке Object Pascal с использованием всех необходимых средств данного языка. Анализ полученных результатов.

    реферат [246,2 K], добавлен 17.11.2012

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

    курсовая работа [1,5 M], добавлен 21.09.2010

  • Рассмотрение порядка создания объектного документа в Delphi7. Создание стандартного приложения. Выбор свойств компонента. Вызов редактора определения полей. Описание структуры документа. Создание DataSet для компонента ClientDataSet. Представление данных.

    реферат [2,0 M], добавлен 22.07.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.