Аналоговые часы на Delphi



15

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Российский государственный социальный университет

Филиал в г. Анапа

 

 

 

Факультет:  Информационных технологий  экономики  и права  

Кафедра:  Техносферной безопасности математики и информатики

Специальность: АСОИиУ

 

Студент:  Кислинский Эдуард Юрьевич

 

 

 

КУРСОВОЙ  ПРОЕКТ

 

 

Тема:     «Аналоговые часы на Delphi»

 

Дисциплина:  «Объектно-ориентированное программирование»

 

 

 

 

 

 

                                                  Дата выполнения «05» декабря 2011г.

                                                            Результат выполнения (оценка)  ________

                                                            Преподаватель-рецензент ______________

 

 

 

 

 

 

Содержание

 

  Содержание              2

Аннотация              3

Введение              4

    1 История Delphi………………………………………………………………5

1.1   История языка……………………………………………………………7

1.2   Объектно-ориентированное программирование……………………10

1.3   Объект и класс………………………………………………………….11

2 Постановка задачи…………………………………………………...13

   2.1 Математическое описание……………………………………….14

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

  3.1 Программа на языке Delphi              16

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

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

Заключение              24

Литература………………………………………………………..........25

 


Аннотация

 

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


Введение

 

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

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

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

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

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

ЭВМ – это машина для автоматической обработки информации.

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

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

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


1 История  Delphi

 

 

В России Borland Delphi появляется в конце 1993 г. и сразу же завоевывает широкую популярность. Новые версии выходят практически каждый год. В них реализуются все новые мастера, компоненты и технологии программирования.

 

Действительно, процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Вы просто помещаете нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки - и вот простое приложение готово. Причем разработчик получает в свое распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему (в том числе и по Microsoft API), средства коллективной работы над проектом, всего просто не перечислить. Вы можете создавать компоненты ActiveX без использования Microsoft IDL, расширять возможности web-сервера (скрипты на стороне сервера), практически ничего не зная об HTML, XML или ASP. Можно создавать распределенные приложения на базе СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным Borland DataBase Engine, ODBC-драйверы или Microsoft ADO. Появившаяся, начиная с Delphi 3, поддержка многозвенной технологии (multi-tiered) доступа к данным позволяет создавать масштабируемые приложения (относительно слабо зависящие от сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на среднее звено.

 

Как уже говорилось ранее, в Delphi используется язык Object Pascal, который постоянно расширяется и дополняется Borland. Язык в полной мере поддерживает все требования, предъявляемые к объектно-ориентированному языку программирования. Как и положено строго типизированному языку, классы поддерживают только простое наследование, но зато интерфейсы могут иметь сразу несколько предков. К числу особенностей языка следует отнести поддержку обработки исключительных ситуаций (exceptions), а также перегрузку методов и подпрограмм (overload) в стиле C++. К числу удачных, на взгляд автора, относится также поддержка длинных строк в формате WideChar и AnsiChar. Последний тип (AnsiStrmg) позволяет использовать все прелести динамического размещения информации в памяти без всяких забот о ее выделении и сборке мусора Delphi делает это автоматически. Для поклонников свободного стиля программирования имеются открытые массивы, варианты и вариантные массивы, позволяющие размещать в памяти все, что душе угодно и смешивать типы данных.

 

Вы можете создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать проектов и , создающих проектов. Мало того, Delphi предоставляет разработчику интерфейс для связи ваших приложений (или внешних программ) с интегрированной оболочкой Delphi (IDE).

 

Таким образом, вы можете использовать Delphi для создания как самых простых приложений, на разработку которых требуется 2-3 часа, так и серьезных корпоративных проектов, предназначенных для работы десятков и сотен пользователей. Причем для этого можно использовать самые последние веяния в мире компьютерных технологий с минимальными затратами времени и сил.


 

1.1  История языка

 

Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

 

Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

 

Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal.

 

Delphi оказал огромное влияние на создание концепции языка C для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.

Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы .NET);

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

 

Delphi for .NET — среда разработки Delphi, а также язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET.

 

Первая версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.

 

В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки Builder, Delphi и C++ Builder по причине убыточности этого направления. Планировалась продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор.

 

Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland.

 

В августе 2006 года Borland выпустил облегченную версию RAD Studio под именем Turbo: Turbo Delphi (для Win32 и .NET), Turbo C, Turbo C++.

 

В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.

 

В марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

 

В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap.

 

Embarcadero RAD Studio 2010

 

25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009. Версия привнесла множество нововведений в язык, как то:

По умолчанию полная поддержка Юникода во всех частях языка, VCL и RTL; замена обращений ко всем функциям Windows API на юникодные аналоги (то есть MessageBox вызывает MessageBoxW, а не MessageBoxA).

Обобщённые типы, они же generics.

Анонимные методы.

Новая директива компилятора POINTERMATH [ON|OFF].

Функция Exit теперь может принимать параметры в соответствии с типом функции.

 

1.2 Объектно-ориентированное программирование

 

Язык программирования Object Pascal и его достойный преемник, среда программирования Delphi, построены на основе получившей широкое развитие на стыке 70–80-х годов XX века теории объектно-ориентированного

программирования (Object-Oriented Programming, OOP). В то время идея

описания программ в базисе логических сущностей и взаимодействия меж-

ду ними не была такой уж бесспорной, а у некоторых оппонентов даже вы-

зывала определенное недоумение.

Пока консервативно настроенные личности занимались критикой новой

идеи и всячески пропагандировали традиционный по тем временам проце-

дурный стиль, компания Borland и корпорация Microsoft активно занялись

разработкой концептуально новых систем программирования. Спустя срав-

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

ботки ПО, совершившие революционный переворот в самой идее програм-

мирования. В первую очередь это объектно-ориентированные C++ и Object

Pascal, а чуть позднее Microsoft Visual C++, Borland C++ Builder и, конечно

же, Borland Delphi.

Появление даже первых версий этих систем поумерило пыл критиков ООП.

Трудно придираться к программным продуктам, в которых создание клас-

сического примера «Hello, World» занимает не более минуты и обходится

без единой строки кода. Для сравнения аналогичная задача на старом доб-

ром языке С потребует не менее 50 строк кода.


1.3 Объект и класс

 

Уже само название концепции «объектно-ориентированное программирова-

ние» указывает на то, что ключевой фигурой в OOП является объект. Что

же это такое? В окружающей нас среде объект – это то, что можно пощупать

руками, это книга, кнопка на клавиатуре, сама клавиатура, настольная

лампа, проезжающий за окном автомобиль. Каждый объект обладает неко-

торыми характеристиками, сравнивая которые мы можем судить о сходстве

или различии объектов. Так, несмотря на схожесть кнопок клавиатуры, мы

различаем их по сопоставленному им символу алфавита. Кроме того, есть

характеристики, взглянув на которые мы можем судить о текущем состоя-

нии объекта, например, лампа включена или выключена, автомобиль мчит-

ся со скоростью 60 км/ч.

Все присущие объекту характеристики в терминах OOП называют полями.

По сути, это принадлежащие объекту переменные определенного типа, в ко-

торые записываются значения, отражающие состояние объекта. Для управ-

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

два ключевых метода: включить и выключить. У автомобиля этих методов

значительно больше: он заводится, набирает скорость, изменяет направле-

ние движения, замедляет движение и все это время пожирает бензин.

В первую очередь методы воздействуют на поля объекта. Так, практически все

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

Если методы объекта возвращают какое-нибудь значение, то они реализуются

в виде функции, в противном случае метод представляется процедурой.

 

 

 

 

 

Объект не может возникнуть из воздуха, среда программирования каким-то образом должна быть проинформирована о его характеристиках. Поэтому предварительно программист описывает объект; такое описание называется  классом. Класс – это чертеж будущего объекта, в котором учитываются не только его конструктивные элементы (поля), но и определяются способы управления этими элементами – методы класса.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

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

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

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

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

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

 


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

 

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

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

 

1.      Константа 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. Закрытие программы

 

 

 

 

 

             

 

 

 

 

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

 

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

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

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

Данный алгоритм является однозначным и  результативным.

 

 

 

 


3.1 Программа на языке 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.

                         

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

 

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

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

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

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

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

Ellipse – построение окружности (Функция)

Canvas -  вырисовка объекта (Класс)

round – oкругление до целого (Функция)

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

bs: TBrushStyle - стиль кисти

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

        pw: integer - ширина карандаша

TextOut - вывод текста на канву


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

 

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

 

 

 

 

 

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


Заключение

 

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


Литература

 

1.      Delphi. Программирование на языке высокого уровня : Учебник для ВУЗов/Фаронов В.В. Изд-во: Питер 2011 г. 640 с.

2.      Программирование в Delphi: процедурное, объектно-ориентированное, визуальное: Учебное пособие, Серия: Специальность/Белов В.В., Чистякова В.И. Изд-во: Горячая Линия-Телеком 2009 г. 240 с.

3.      Курс Delphi для начинающих. Полигон нестандартных задач: Элективный курс  Профильное обучение/ Ремнев А.А., Федотова С.В.Изд-во: Солон-пресс 2007 г. 360 с.

Аналоговые часы на Delphi