4
Департамент образования и науки Приморского края
Краевое государственное бюджетное образовательное учреждение
среднего профессионального образования
«Находкинский государственный гуманитарно-политехнический колледж»
КУРСОВАЯ РАБОТА (ПРОЕКТ)
По дисциплине: Системное программирования
На тему: «Разработка алгоритма программы «Таймер» на языке программирования C++
Студента Соловьева Евгения Андреевича
Группа 731 специальность 230115 Программирование в компьютерных системах
Находка 2013
Содержание
Введение
Раздел 1. Теоретическая часть
1.1 Язык программирование C++
1.2 Среда программирования Embarcadero RAD Studio
Раздел 2. Практическая часть
2.1 Создание окна, которое отображает системную дату и время
2.2 Разработка приложения таймер с функциями
2.2.1 Выполнение выбранного действия в определенный промежуток времени заданный пользователем
2.2.2Выполнение выбранного действия через определенный промежуток времени заданный пользователем
3. Руководство программиста
4. Руководство пользователя
Заключение
Список использованных источников
Приложение А. Программный Листинг
Введение
В современном мире язык программирования Си (C++) широко используется для разработки программного обеспечения, а также это язык программирования высокого уровня, который хорошо известный своей эффективностью, экономичностью, и переносимостью. Ведь первые Операционные системы были написаны именно на языке Си. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр).
Цель данной курсовой работы - является систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических занятиях.
Достижение цели обеспечивается решением следующей задачи:
Разработка приложения «Таймер» при помощи динамических библиотек С++
Использование полученных знаний на лекционном курсе
Раздел 1. Теоретическая часть
1.1 Язык программирование C++
Для разработки программы применялся язык программирования C++ .
Язык программирования С++ был разработан на основе языка Си Бьярном Страуструпом (Bjarne Stroustrup) и вышел за пределы его исследовательской группы в начале 80-х годов. Язык С++ является надмножеством языка Си, поэтому программы, написанные на языке Си могут обрабатываться компилятором языка С++. В программах на языке С++ можно использовать тексты на языке С и обращаться к библиотечным функциям языка Си. Язык С++ был создан с учетом следующих целей: улучшить язык Си, поддержать абстракцию данных и обеспечить объектно-ориентированное программирование.
Объектно-ориентированное программирование (ООП) -- это новый подход к созданию программ. ООП аккумулирует лучшие идеи, воплощенные в структурном и модульном программировании, и сочетает их с новыми мощными концепциями, которые позволяют оптимально организовывать программы. ООП позволяет разложить проблему на составные части наиболее естественным способом с учетом иерархии взаимосвязей. Каждая часть становится самостоятельным объектом, содержащим свои собственные данные, операции и функции, которые относятся к этому объекту. В результате процесс составления программ упрощается и программист получает возможность оперировать с большими по объему программами. Одна из главных особенностей ООП -- это возможность определять новые типы данных так, что их использование ничем не будет отличаться от использования встроенных в язык типов данных. Новые типы данных должны в большей мере соответствовать понятиям той прикладной области, для которой разрабатывается программа, чем встроенные типы, ориентированные на архитектуру компьютера.
Рассмотрим достоинства языка программирования C++:
Высокая совместимость с языком Си
Поддержка различных стилей программирования
Вычислительная производительность
Недостатки:
Синтаксис, провоцирующий ошибки
Некоторые преобразования типов неинтуитивны
Плохая поддержка модульности
Основные среды языка C++: Visual C++, C++ Builder, Borland C++, Embarcadero RAD Studio.
Таким образом, для разработки программы была выбрана среда программирования Embarcadero RAD Studio. Embarcadero RAD Studio была выбрана последующим возможностям:
подключение к локальным базам данных InterBase®, Blackfish™ SQL и MySQL в Delphi и C++Builder;
подключение к базам данных в VisualStudio с помощью ADO.NET, включая подключение к локальным базам данных InterBase и Blackfish в DelphiPrism;
развертывание Blackfish SQL в системах с одним пользователем и размером базы данных 512 МБ;
веб-библиотеку VCL с ограничением числа подключений (не более пяти);
набор характеристик и средств аудита кода начального уровня, помогающих проанализировать стиль программирования и состояние проекта;
визуализацию кода с использованием UML, упрощающую анализ исходного кода благодаря визуальному представлению.
1.2 Среда программирования Embarcadero RAD Studio
Embarcadero® RAD Studio 2010 - это комплексное решение для быстрой разработки приложений Windows®, .NET, веб-приложений и приложений баз данных. Оно включает в себя Delphi®, C++Builder® и Delphi ®Prism™, позволяя создавать приложения для различных платформ Windows и баз данных до 5 раз быстрее. Инструменты RAD Studio значительно ускоряют создание приложений для настольных компьютеров, рабочих станций, сенсорных дисплеев, информационных терминалов и Интернета, поэтому их использует уже более 2 миллионов разработчиков. В состав этих средств входят быстрые компиляторы, визуальная среда для разработки приложений с пользовательским интерфейсом, платформа визуальных компонентов (VCL), а также обширные возможности для подключения к базам данных и службам
Также RAD Studio работает со всеми типами баз данных, архитектур и протоколов.
Платформа RAD Studio DataSnap® и драйверы доступа к данным dbExpress™ позволяют создать одну систему и с ее помощью легко получать доступ к различным источникам данных. При этом обеспечивается поддержка специфических функций баз данных разных поставщиков без ухудшения их производительности и управляемости. В то время как другие средства быстрой разработки рассчитаны на определенную базу данных или архитектуру, либо используют 'универсальные' методы подключения к данным, которые ограничивают производительность и возможности управления, открытая среда RAD Studio обладает гибкостью и эффективностью, необходимыми для создания высококачественных приложений.
Основные возможности для разработки приложений Windows:
Интегрированная среда разработки Delphi и C++Builder с функцией перетаскивания мышью
Более 250 компонентов в VCL (Библиотека визуальных компонеентов (Visual Component Library) -- объектно-ориентированная библиотека)
Встроенная поддержка касаний и жестов (более 30 готовых жестов)
dbExpress с поддержкой 9 основных баз данных, включая InterBase®
Многоуровневое промежуточное ПО DataSnap с поддержкой JSON, REST, HTTP, COM и XML
Возможность отладки многопоточных приложений
UML/аудит кода и учет показателей
Единая система для работы с Windows 2000, Windows Xp, Windows Vista и Windows 7
Основные возможности для разработки приложений .NET:
Язык программирования Delphi Prism для .NET
Включена интегрированная среда разработки на основе Visual Studio либо установка в Visual Studio
Поддержка новейших технологий .NET
Стандартное подключение к базам данных с помощью ADO.NET, платформа dbExpress для баз данных InterBase и Blackfish SQL
Разработка клиентов DataSnap .NET
Разработка веб-приложений с помощью ASP.NET
Использование Mono с ОС Windows, Linux и Mac OS X
Раздел 2. Практическая часть
2.1 Создание окна, которое отображает системную дату и время
Для создания этого окна использовались компоненты GroupBox и Label.
Рисунок 2.1 Окно, отображающее системную дату и время
Листинг 2.1 Отображение текущей даты и время
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label2->Caption = TimeToStr(Time()); // показать текущее время
Label5->Caption = DateToStr(Now()); //показать дату
if (DayOfWeek(Now()) == 1) {Label7->Caption= 'Воскресенье';}
if (DayOfWeek(Now()) == 2) {Label7->Caption = 'Понедельник';}
if (DayOfWeek(Now()) == 3) {Label7->Caption = 'Вторник';}
if (DayOfWeek(Now()) == 4) {Label7->Caption = 'Среда';}
if (DayOfWeek(Now()) == 5) {Label7->Caption = 'Четверг';}
if (DayOfWeek(Now()) == 6) {Label7->Caption = 'Пятница';}
if (DayOfWeek(Now()) == 7) {Label7->Caption = 'Суббота';}
2.2 Разработка приложения таймер с функциями
2.2.1 Выполнение выбранного действия в определенный промежуток времени заданный пользователем
Для разработки окна этой функции использовались компоненты GroupBox, button, label и timepicker. В этой функции задавался определенный промежуток времени и выбиралось одно из представленных действий (рисунок 2.2.1). После того как системное время совпадало с заданным, программа выполняла выбранное действие и издавала звуковой сигнал.
Рисунок 2.2.1 Окно в котором выбирается действие и задается время
Листинг 2.2.1 Выполнение выбранного действия в определенный промежуток времени заданный пользователем
oid __fastcall TForm1::Timer3Timer(TObject *Sender)
{
iHours=StrToInt(FormatDateTime('hh', Time()));
iMinutes=StrToInt(FormatDateTime('nn', Time()));
iSeconds=StrToInt(FormatDateTime('ss', Time()));
// …получим текущее время системы …
iAlarmHours=StrToInt(FormatDateTime('hh', Form1->timepicker->Time));
iAlarmMinutes=StrToInt(FormatDateTime('nn', Form1->timepicker->Time));
iAlarmSeconds=StrToInt(FormatDateTime('ss', Form1->timepicker->Time));
// Время срабатывания будильника, которое задал пользователь
if (Button2->Enabled == false) { //Если ктопка 'Старт' не видимая, то
if (iHours == iAlarmHours &&
iMinutes == iAlarmMinutes &&
iSeconds == iAlarmSeconds)
{ // и если оно совпало с заданным временем пользователем…
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
}
2.2.2 Выполнение выбранного действия через определенный промежуток времени заданный пользователем
В этой функции после того как время на таймере достигало начального значения, программа выполняла выбранное действие и выдавала звуковой сигнал(Рисунок 2.2.2).
Рисунок 2.2.2 Окно в котором выбирается действие и задается время
Листинг 2.2.2 Выполнение выбранного действия через определенный промежуток времени заданный пользователем
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
if (StrToInt(Edit5->Text)>0) {
Edit5->Text = IntToStr(StrToInt(Edit5->Text)-1);
}
if (Edit5->Text <= 0 &&
StrToInt(Edit4->Text)>0)
{
Edit4->Text = StrToInt(Edit4->Text)-1; //добавлено StrToInt - было: '59' is not valid date and time
Edit5->Text = 59; // Поле 'секунды' - без изменений
}
// Обратый отсчет, и проверка значения в 'Еdit4'
if (Edit4->Text <= 0 &&
StrToInt(Edit3->Text)>0)
{
Edit3->Text = StrToInt(Edit3->Text)-1; //добавлено StrToInt // Поле 'секунды'
Edit4->Text = 60; // было 59 - но 1 час = 60 минут, так и стартуем // Поле 'минуты'
}
if (Edit3->Text == 0 && // Поле 'секунды'
Edit4->Text == 0 && // Поле 'минуты'
Edit5->Text == 0) // Поле 'секунды'
{ // если значения в таймере равны 0, то
Timer2->Enabled=false;
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
Для разработки окна этой функции использовались компоненты GroupBox, edit, button, label и UpDown.
3. Руководство программиста
Листинг 3.1 Создание окна
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Position = poDesktopCenter;
Form1->Width = 265;
MediaPlayer1->Visible = false; // скрываем плеер
MediaPlayer1->FileName = 'alarm.mp3'; // указываем плееру файл
MediaPlayer1->Open(); // и открываем его для проигрывания
}
В данной функции можно изменить позицию, длину и звуковой сигнал программы.
Смена позиции:Form->Positon
Смена длины:Form->Width
Смена звукового сигнала:MediaPlayer1->FileName
Листинг 3.2 Выполнение выбранного действия в заданный промежуток времени
void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
iHours=StrToInt(FormatDateTime('hh', Time()));
iMinutes=StrToInt(FormatDateTime('nn', Time()));
iSeconds=StrToInt(FormatDateTime('ss', Time()));
// …получим текущее время системы …
iAlarmHours=StrToInt(FormatDateTime('hh', Form1->timepicker->Time));
iAlarmMinutes=StrToInt(FormatDateTime('nn', Form1->timepicker->Time));
iAlarmSeconds=StrToInt(FormatDateTime('ss', Form1->timepicker->Time));
// Время срабатывания будильника, которое задал пользователь
if (Button2->Enabled == false) { //Если кнопка 'Старт' не видимая, то
if (iHours == iAlarmHours &&
iMinutes == iAlarmMinutes &&
iSeconds == iAlarmSeconds)
{ // и если оно совпало с заданным временем пользователем…
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
}
В данной функции можно изменить какую программу будет запускать таймер в определенный промежуток времени заданный пользователем.
Чтобы изменить названия действий нужно зайти в RadioGroup->Properties->Items и открыть Script List Editor при нажатии на троеточие.
Листинг 3.3 Выполнение выбранного действия через определенный промежуток времени
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
if (StrToInt(Edit5->Text)>0) {
Edit5->Text = IntToStr(StrToInt(Edit5->Text)-1);
}
if (Edit5->Text <= 0 &&
StrToInt(Edit4->Text)>0)
{
Edit4->Text = StrToInt(Edit4->Text)-1; //добавлено StrToInt - было: '59' is not valid date and time
Edit5->Text = 59; // Поле 'секунды' - без изменений
}
// Обратный отсчет, и проверка значения в 'Еdit4'
if (Edit4->Text <= 0 &&
StrToInt(Edit3->Text)>0)
{
Edit3->Text = StrToInt(Edit3->Text)-1; //добавлено StrToInt // Поле 'секунды'
Edit4->Text = 60; // было 59 - но 1 час = 60 минут, так и стартуем // Поле 'минуты'
}
if (Edit3->Text == 0 && // Поле 'секунды'
Edit4->Text == 0 && // Поле 'минуты'
Edit5->Text == 0) // Поле 'секунды'
{ // если значения в таймере равны 0, то
Timer2->Enabled=false;
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
В данной функции можно изменить какую программу будет запускать таймер через определенный промежуток времени заданный пользователем.
4. Руководство пользователя
алгоритм программа таймер
Минимальные системные требования:
- монитор с минимальным разрешением экрана 800 на 600 пикселей;
- наличие клавиатуры;
- среда MS-DOS, Windows 98/200/ME/XP/Vista/7/8
- процессор тактовой частотой не ниже 200МГц;
- видеокарта;
- минимальный объем оперативной памяти - 32 МБ.
Запуск приложения происходит при двойном нажатии левой кнопки мыши на ярлыке игры с расширением EXE.
Для того чтобы программа выполнила нужное действие в определенный промежуток времени, нужно выбрать действие нажатием левой кнопки мыши и задать время в которое будет выполняться действие, как это показано на Рисунке 3.1. И нажать кнопку старт.
Рисунок 3.1 Окно в котором выбрали действия и задали время
А также если пользователь желает, чтобы действие выполнилось через определенное время. То нужно выбрать действие и задать время, через которое будет запускаться, как это показано на Рисунке 3.2
Рисунок 3.2 Окно в котором выбрали действия и задали время
Заключение
При выполнении данной работы, потребовались знания языка программирования. В ходе написания программы требовалось обращаться к дополнительным источникам, чтобы разобраться с важными аспектами программирования, которые помогли создать приложение.
В целом данная работа помогла лучше освоить язык С++ и улучшить свои навыки программирования.
Список использованных источников
Б. Пахомов - C/C++ и MS Visual C++ 2008 для начинающих; БХВ-Петербург; 2008 - 624с
Герберт Шилдт - C++ from the Ground Up; Вильямс; 2008 - 624 с
Давыдов В.Г. Visual C++. Разработка Windows-приложений с помощью MFC и API-функций. -- СПб: БХВ-Петербург, 2008.
Дж. Коплиен - Программирование на C++; Питер; 2005 - 408 с
Дж. Либерти - Освой самостоятельно C++; 2099 - 820 с
Дьюхерст С.С. - C++. Священные знания. 2-е издание, исправленное; 2012 - 240 с
Зиборов В.В - MS Visual C++ 2010 в среде .NET; 2012 - 320 с
Лаптев В.В. - C++. Объектно-ориентированное программирование; Питер; 2008 - 464 с
Макс Шлее - Профессиональное программирование на C++; БХВ - Петербург; 2009 - 896с
Мэтью Уилсон - Расширение библиотеки STL для С++; ДМК Пресс, Б-П; 2008 - 608 с
Н.А. Литвиненко - Технология программирования на C++. Win32 API-приложения; БХВ-Петербург - 2010, 288с
Паола Франка - С++. Учебный курс; Питер; 2012 - 496 с
Паола Франка - С++. Учебный курс; Питер; 2012 - 496 с
Пахомов Б - Самоучитель C/C++ и C++ Builder; БХВ-Петербург; 2008 - 670 с
Прохоренок Н.А. - Программирование на C++ в VisualStudio 2010 Express; 2010 - 229 с
Роберт Лафоре - Объектно - ориентированное программирование в С++; Питер; 2011 - 928 с
Роберт Лафоре - Объектное - ориентированное программирование в С++; Питер; 2011 - 928 с
Саммерфилд М. - Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на C++; 2011 - 560 с
Степаненко О.Е. - Visual C++/NET. Классика программирования; 2010 - 768 с
Стефан Рэнди Дэвис - С++ для «чайников»; Диалектика, Вильямс; 2009 - 336 с
Стивен Прата - Язык программирования С++. Леции и упражнения; Вильямс; 2012 - 1248 с
Стивен Прата - Язык программирования С++. Леции и упражнения; Вильямс; 2012 - 1248 с
Страуструп Б - Язык программирования C++; Бином - 2011, 1136
Уоллес Вонг - Основы программирования для «чайников»; М. -- ООО 'И.Д. Вильямс'; 2008 - 336 с
Федоренко Ю. - Алгоритмы и программы на C++ Builder; 2010 - 544 с
Приложение А. Программный Листинг
Project1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM('Unit1.cpp', Form1);
//---------------------------------------------------------------------------
WINAPI Win Main(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception('');
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Uni1.cpp
//---------------------------------------------------------------------------
#include <sys/timeb.h>
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include 'Unit1.h'
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource '*.dfm'
TForm1 *Form1;
boolbIsTimerOn; // Таймер включён
intiHours; // Текущий час.
intiMinutes; // Текущая минута.
intiSeconds; // Текущая секунда
intiAlarmHours; // Час оповещения.
intiAlarmMinutes; // Минута оповещения.
intiAlarmSeconds; // Секунда оповещения
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Position = poDesktopCenter;
Form1->Width = 265;
MediaPlayer1->Visible = false; // скрываем плеер
MediaPlayer1->FileName = 'alarm.mp3'; // указываем плееру файл
MediaPlayer1->Open(); // и открываем его для проигрывания
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button2->Enabled=false; // Кнопка 'Старт' невидима
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
bIsTimerOn=false; // Выключить будильник
Button2->Enabled=true;
timepicker->Time=StrToTime('0:00:00'); // Сброс на ноль.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
iHours=StrToInt(FormatDateTime('hh', Time()));
iMinutes=StrToInt(FormatDateTime('nn', Time()));
iSeconds=StrToInt(FormatDateTime('ss', Time()));
// …получим текущее время системы …
iAlarmHours=StrToInt(FormatDateTime('hh', Form1->timepicker->Time));
iAlarmMinutes=StrToInt(FormatDateTime('nn', Form1->timepicker->Time));
iAlarmSeconds=StrToInt(FormatDateTime('ss', Form1->timepicker->Time));
// Время срабатывания срабатывания будильника, которое задал пользователь
if (Button2->Enabled == false) { //Если кнопка 'Старт' не видимая, то
if (iHours == iAlarmHours&&
iMinutes == iAlarmMinutes&&
iSeconds == iAlarmSeconds)
{ // и если оно совпало с заданным временем пользователем…
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
exit(0); // Выход с программы
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label2->Caption = TimeToStr(Time()); // показать текущее время
Label5->Caption = DateToStr(Now()); //показать дату
if (DayOfWeek(Now()) == 1) {Label7->Caption= 'Воскресенье';}
if (DayOfWeek(Now()) == 2) {Label7->Caption = 'Понедельник';}
if (DayOfWeek(Now()) == 3) {Label7->Caption = 'Вторник';}
if (DayOfWeek(Now()) == 4) {Label7->Caption = 'Среда';}
if (DayOfWeek(Now()) == 5) {Label7->Caption = 'Четверг';}
if (DayOfWeek(Now()) == 6) {Label7->Caption = 'Пятница';}
if (DayOfWeek(Now()) == 7) {Label7->Caption = 'Суббота';}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
{
if(Button == Comctrls::btNext) {
Edit3->Text = IntToStr(StrToInt(Edit3->Text)+1);
}
if(Button == Comctrls::btPrev) {
Edit3->Text = IntToStr(StrToInt(Edit3->Text)-1);
// Изменение значения в поле 'Edit1'
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown4Click(TObject *Sender, TUDBtnType Button)
{
if(Button == Comctrls::btNext) {
Edit4->Text = IntToStr(StrToInt(Edit4->Text)+1);
}
if(Button == Comctrls::btPrev) {
Edit4->Text = IntToStr(StrToInt(Edit4->Text)-1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown5Click(TObject *Sender, TUDBtnType Button)
{
if(Button == Comctrls::btNext) {
Edit5->Text = IntToStr(StrToInt(Edit5->Text)+1);
}
if(Button == Comctrls::btPrev) {
Edit5->Text = IntToStr(StrToInt(Edit5->Text)-1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
if (StrToInt(Edit5->Text)>0) {
Edit5->Text = IntToStr(StrToInt(Edit5->Text)-1);
}
if (Edit5->Text <= 0 &&
StrToInt(Edit4->Text)>0)
{
Edit4->Text = StrToInt(Edit4->Text)-1; //добавлено StrToInt - было: '59' is not valid date and time
Edit5->Text = 59; // Поле 'секунды' - без изменений
}
// Обратный отсчет, и проверка значения в 'Еdit4'
if (Edit4->Text <= 0 &&
StrToInt(Edit3->Text)>0)
{
Edit3->Text = StrToInt(Edit3->Text)-1; //добавлено StrToInt // Поле 'секунды'
Edit4->Text = 60; // было 59 - но 1 час = 60 минут, так и стартуем // Поле 'минуты'
}
if (Edit3->Text == 0 && // Поле 'секунды'
Edit4->Text == 0 && // Поле 'минуты'
Edit5->Text == 0) // Поле 'секунды'
{ // если значения в таймере равны 0, то
Timer2->Enabled=false;
MediaPlayer1->Play(); // проигрываем мелодию
switch(RadioGroup1->ItemIndex) {
case 0: {ShellExecute(NULL, 'open', 'mspaint.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 1: {ShellExecute(NULL, 'open', 'notepad.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 2: {ShellExecute(NULL, 'open', 'calc.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 3: {ShellExecute(NULL, 'open', 'wmplayer.exe', NULL, NULL, SW_SHOWNORMAL);break;}
case 4: {ShellExecute(NULL, 'open', 'http://www.microsoft.com', NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Timer2->Enabled = true; // Включить второй таймер
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Timer2->Enabled = false; //Выключить второй таймер
Edit5->Text = '0'; // Значению в поле 'секунды' присвоить 0
Edit4->Text = '0'; // Значению в поле 'минуты' присвоить 0
Edit3->Text = '0'; // Значению в поле 'часы' присвоить 0
}
//---------------------------------------------------------------------------
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
TButton *Button1;
TGroupBox *GroupBox1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TGroupBox *GroupBox2;
TLabel *Label8;
TButton *Button2;
TButton *Button3;
TDateTimePicker *timepicker;
TGroupBox *GroupBox3;
TLabel *Label9;
TButton *Button4;
TButton *Button5;
TRadioGroup *RadioGroup1;
TTimer *Timer1;
TTimer *Timer2;
TTimer *Timer3;
TEdit *Edit3;
TUpDown *UpDown3;
TEdit *Edit4;
TUpDown *UpDown4;
TEdit *Edit5;
TUpDown *UpDown5;
TMediaPlayer *MediaPlayer1;
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Timer3Timer(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall Timer2Timer(TObject *Sender);
void __fastcall UpDown3Click(TObject *Sender, TUDBtnType Button);
void __fastcall UpDown4Click(TObject *Sender, TUDBtnType Button);
void __fastcall UpDown5Click(TObject *Sender, TUDBtnType Button);
void __fastcall Button4Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcallFormCreate(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcallTForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif