Практическая работа № 12. Создание программ с использованием компонента Timer.
Объём учебного времени – 2ч
Методические рекомендации
1. Цель работы: Научиться работать с компонентом Timer
2. Перечень необходимых средств обучения:
2.1 Технические средства обучения:
- Компьютер Core i3 3.0, 2 Gb оперативной памяти, винчестер 250 Gb, DVD
2.2 Программное обеспечение:
- Программа ОС Windows XP/7;
- Антивирусные программы: Kaspersky AntiVirus;
- Браузер Internet Explorer;
- Интегрированная среда программирования MS Visual Studio 2010.
3. Основные теоретические положения:
Компонент Timer генерирует последовательность событий Tick. Свойства компонента приведены в таблице:
Свойство | Описание |
Interval | Период генерации события Tick. Задается в миллисекундах |
Enabled | Разрешение работы. Разрешает (значение true) или запрещает (значение false) генерацию события Tick |
4. Практические указания:
Задание 1.
1. Откройте программу Visual Studio 2010 Professional
2. Выберите – Создать проект – Приложение Windows Forms, введите расположение и имя проекта.
3. Создайте приложение «Таймер»
A. Проектирование интерфейса приложения.
а). Добавьте следующие компоненты на форму:
Form1 System.Windows.Forms.Form;
label1 System.Windows.Forms. Label;
label2 System.Windows.Forms.Label;
label3 System.Windows.Forms.Label;
groupBox1 System.Windows.Forms. GroupBox;
numericUpDown1 System.Windows.Forms. NumericUpDown;
numericUpDown2 System.Windows.Forms. NumericUpDown;
button1 System.Windows.Forms. Button;
timer1 System.Windows.Forms. Timer;
textBox1 System.Windows.Forms. TextBox.
Новыми являются элементы numericUpDown1 и numericUpDown1, которые предназначены для ввода числовых данных. Данные можно ввести с клавиатуры или при помощи командных кнопок Увеличить и Уменьшить, которые находятся справа от поля редактирования.
б). Измените свойства и расположение компонентов согласно рисунка.
b. Программирование приложения
а). В разделе public: Form1(void) выполните настройку компонентов numericUpDown, курсора и кнопки Пуск:
Компоненту NumericUpDown1 присвойте максимально возможное значение, которое можно ввести в поле компонента (свойство Maximum),
Компоненту NumericUpDown1 присвойте минимально возможное значение, которое можно ввести в поле компонента (свойство Minimum),
// чтобы при появлении окна курсор не мигал в поле редактирования
numericUpDown1->TabStop = false;
numericUpDown2->Maximum = 59;
numericUpDown2->Minimum = 0;
numericUpDown2->TabStop = false;
// кнопка Пуск/Стоп не доступна
button1->Enabled = false;
б). В разделе #pragma endregion добавьте:
private: DateTime^ t1; // время запуска таймера
private: DateTime^ t2; // время срабатывания таймера
в). Напишите функцию обработки события ValueChanged компонентов
NumericUpDown1 и NumericUpDown2. Например:
private: System::Void NumericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e)
{}
Словесный алгоритм:
Если свойство компонента NumericUpDown – Value равно 0, то кнопка Пуск недоступна, в противном случае доступна.
г). Напишите функцию добавляющую временные показатели в NumericUpDown1 NumericUpDown2 по щелчку на кнопке Пуск.
if (!timer1->Enabled)
{
// пуск таймера
// t1 - текущее время
// t2 = t1 + интервал
t1 = gcnew DateTime(DateTime::Now.Year,
DateTime::Now.Month, DateTime::Now.Day);
t2 = t1->AddMinutes((double)numericUpDown1->Value);
t2 = t2->AddSeconds((double)numericUpDown2->Value);
groupBox1->Enabled = false;
button1->Text = "Стоп";
if (t2->Minute < 10)
label1->Text = "0"+t2->Minute.ToString()+":";
else
label1->Text = t2->Minute.ToString() + ":";
if (t2->Second < 10)
label1->Text += "0" + t2->Second.ToString();
else
label1->Text += t2->Second.ToString();
// период возникновения события Tick - 1 секундf
timer1->Interval = 1000;
// пуск таймера
timer1->Enabled = true;
groupBox1->Enabled = false;
}
else
{
// таймер работает, останавливаем
д). Объясните все команды функции.
е). Допишите окончание функции.
ж). Напишите функцию обработки сигнала от таймера:
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
t2 = t2->AddSeconds(-1);
if (t2->Minute < 10)
label1->Text = "0" + t2->Minute.ToString() + ":";
else
label1->Text = t2->Minute.ToString() + ":";
if (t2->Second < 10)
label1->Text += "0" + t2->Second.ToString();
else
label1->Text += t2->Second.ToString();
if (Equals(t1, t2))
{
timer1->Enabled = false;
this->Activate();
}
}
з). Самостоятельно допишите вывод окна сообщений MessageBox с именем Таймер, содержащее фразу: Заданный интервал времени истек. Компоненты: button1 и groupBox1 приведите в исходное состояние.
Задание 2. Задание для самостоятельного выполнения:
1 вариант. Напишите программу для движения надписи слева направо "Я буду сдавать экзамен по программированию" с использованием компонента Timer.
2 вариант. Напишите программу для движения надписи справа налево "Я буду сдавать экзамен по программированию" с использованием компонента Timer.
3 вариант. Напишите программу для движения надписи сверху вниз "Я буду сдавать экзамен по программированию" с использованием компонента Timer.
4 вариант. Напишите программу для движения надписи снизу вверх "Я буду сдавать экзамен по программированию" с использованием компонента Timer.
5 вариант. Напишите программу для движения кнопки "Нажми меня" слева направо с использованием компонента Timer.
6 вариант. Напишите программу для движения кнопки "Нажми меня" справа налево с использованием компонента Timer.
7 вариант. Напишите программу для движения кнопки "Нажми меня" по главной диагонали экрана с использованием компонента Timer.
8 вариант. Напишите программу для движения кнопки "Нажми меня" по побочной диагонали экрана с использованием компонента Timer.
9 вариант. Напишите программу для движения кнопки "Нажми меня" по периметру экрана с использованием компонента Timer.
10 вариант. Напишите программу для движения кнопки "Нажми меня" по нарисованному лабиринту с использованием компонента Timer.
5. Контрольные вопросы
5.1 Что означает свойство Enabled компонента Timer?
5.2 На какое событие пишут процедуру при работе с компонентом Timer?
5.3 Как организовать движение компонентов на форме?
6. Список рекомендуемой литературы:
Основная литература:
1. Немцова Т.И. Програмиирование на языке выского уровня. Программирование на языке Object Pascal: учеб. пособие /Т.И. Немцова, С.Ю. Голова, И.В. Абрамова. – М.: ФОРУМ: ИНФРА – М, 2012. – 496 с.
2. Овечкин Г.В. Компьютерное моделирование: учебник для студ. учреждений сред. проф. образования / Г.В. Овечкин.- М.: Издательский центр «Академия», 2015.-224с.
3. Немцова, Т. И. Программирование на языке высокого уровня. Программирование на языке С++: учеб. пособие / Т. И. Немцова, С. Ю. Голова, А. И. Терентьев. - М.: ФОРУМ: ИНФРА-М, 2012. - 512 с.: ил. + CD.
4. Гуриков, С. Р. Введение в программирование на языке Visual C#: учеб. пособие / С. Р. Гуриков. - М.: ФОРУМ: ИНФРА-М, 2013. - 448 с.
Дополнительная литература:
5. Рао Сиддхартха Освой самостоятельно С++ за 21 день, 7 изд.: Пер с англ.-М.: ООО «И.Д.Вильямс», 2013 – 688 с.: ил. – Парал.тит.англ.
6. Голицына О.Л. Программное обеспечение: учеб. пособие для среднего профессионального образования-М.:ФОРУМ;ИНФРА-М,2006.-432 с.
7. Виллемер А. Программирование на С++/А. Виллемер;[пер. с нем. М.А.Райтман].-М.:Эксмо,2013.-528с.+CD.-(Мировой компьютерный бестселлер).
8. Культин Н.Б. Microsoft Visual C++ в задачах и примерах.- СПб.: БХВ-Петербург,2010.-272 с.:ил.+CD-ROM.
9. Партыка Т.Л. Операционные системы, среды и оболочки: учеб. пособие для студ. учреждений сред. проф. Образования/ Т.Л. Партыка, И.И. Попов. – 3-е изд., перераб. и доп. – М.: ФОРУМ, 2010. – 543 с.
10. Окулов С.М. Основы программирования: учебное пособие.- М.:БИНОМ. Лаборатория знаний, 2010.- 440 с.
11. Голицына О.Л. Основы алгоритмизации и программирования: учеб. пособие для сред. проф. образования.- М: ФОРУМ; ИНФРА-М,2005.-432 с.
12. Рихтер Дж. Программирование приложений для Microsoft Windows /Пер. с англ. – M.: Microsoft Press, 2003. – C.48-313.