Практическое занятие
Разработка приложения с не визуальными компонентами
1. Теоретическая часть
В среде визуального программирования компоненты - это строительные блоки, из которых строится визуальное представление программы.
Для языка программирования С++ компоненты-это классы, порожденные прямо или косвенно от класса TComponent и имеющие опубликованные свойства. Экземпляры компонент-объекты этих классов, существующие в виде полей формы. Компонент это состояние( свойства)+ действия ( методы) +обратные связи( события).
Состояние компонента описывается его свойствами. Свойства это атрибуты компонента, которые определяют, как компонент отображается на экране и как функционирует. Свойства бывают изменяемые ( для чтения и записи) и неизменяемые ( только для чтения). В зависимости от времени установки свойства подразделяются на свойства времени проектирования и свойства времени выполнения, которые не доступны в инспекторе объектов. Первые объявлены в своем классе в секции __published, а вторые- в секции Public.
Действия, выполняемые компонентом - это его методы. Вызовы методов помещаются в исходный код программы и происходят только во время выполнения приложения. Методы не имеют визуального представления.
Обратные связи компонента это его события. События обеспечивают интерактивность компонентов и реализуются с помощью свойств, содержащих адреса методов.
Все множество компонентов делится на две группы: визуальные и «не визуальные» компоненты. Визуальные компоненты это управляющие элементы пользовательского интерфейса, они видны на экране и выглядят одинаково на стадии проектирования и во время работы программы. Не визуальные компоненты не видны на экране. Например: таймер, компоненты доступа к базам данных. На стадии проектирования они представляются иконками. Во время работы не визуальные компоненты могут отображать информацию на экране. Или: не визуальный компонент MainMenu отображает на форме строку главного меню, а компонент OpenDialog отображает стандартное диалоговое окно выбора файла.
1.2. Практическая часть
Рассмотрим более подробно работу двух таймеров:
1.2.1 Не визуальный или «обыкновенный» Таймер
#include
#include
#include
using namespace std;
using namespace std::chrono;
void Timer(){
int hours = 0, minutes = 0, seconds = 0;
while (true) {
cout
seconds++;
if (seconds==60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
minutes = 0;
hours++;
}
this_thread::sleep_for(0.999s);
system("cls");
}
}
int main()
{
Timer();
}
ИНСТРУМЕНТЫ:
1.2.2 Практическая часть
(онлайн – С++: http://cpp.sh / )
Если у Вас отсутствует установленная среда
разработки на вашем компьютере, то можно
воспользоваться бесплатным указанным
выше онлайн-ресурсом , чтобы добавить код,
Запустить на исполнения, убедиться в работе
«не визуального» таймера.
1.2.3 Для тех, у кого «Студийный» С++
Создать - Новый проект – Консольное приложение-
-пустой проект…(«Меньше чем в Здравствуй Мир!»..)
1.2.4 Для самых «больших молодцов»:
www.microsoft.com
1.3 Не визуальный компонент «Таймер с отображением в консоли Windows»:
НАЧАЛО КОДА:
ПРОДОЛЖЕНИЕ:
#include // файл реализации для предварительно скомпилированного заголовка
#include / /Библиотека для определения координат курсора
using namespace std;
void gotoxy(int x, int y) // Функция задания координат курсора
{
COORD ord;
ord.X = x;
ord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), ord);
}
int main()
{
int n, h, m, s, seth, setm, sets, p, speed;
string hour, min, sec;
cout
cout
cin seth;
cout
cin setm;
cout
cin sets;
cout
cout
cin speed;
p = seth * 3600 + setm * 60 + sets;
for (int n = p; n
{
this_thread::sleep_for(chrono::seconds(speed));
h = n / 3600;
m = n / 60;
s = n % 3600;
if (h 24) h = h % 24;
if (m 60) m = m % 60;
if (s 60) s = s % 60;
if (h
if (m
if (s
if (h == 24) hour = "00";
if (m == 60) min = "00";
if (s == 60) sec = "00";
cout
gotoxy(0, 6);
}
system("pause");
return 0;
}
1.4 Простой пример не визуального программного
объекта
Как написать на С/С++ таймер который будет выполнять какой то участок кода через на пример 5 секунд. К примеру выводить 5.. 4.. 3.. 2.. 1.. и выводить строку текста?
#include
#include
#include
int main() {
for (std::size_t i = 5; i != 0; --i) {
std::cout
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout
}
Решение есть всегда!
1.5 Рассмотрим практический пример:
- Изучить теоретический материал материал по теме.
- Изучить (используя имеющийся готовый код) на практике работу приведенных, в качестве примера таймеров
Техническое задание:
- Используя вышеприведенный теоритический материал необходимо, получить практические навыки работы по созданию не визуального приложения: Вариант 1: Необходимо «помочь» персонажам решить проблему с выводом участка кода через 5 секунд (интервал можно выбрать произвольный не более 8 секунд, не менее 3). Произвести отладку и компиляцию.
- Вариант 2: Написать собственный (Улучшенный с вашей точки зрения) любой Таймер
- Сформировать по всей проделанной практической работе отчет. Сформировать выводы в последнем пункте отчета. Проект, программу и отчет запаковать в zip, отправить преподавателю на проверку.
ДОПОЛНИТЕЛЬНЫЕ ИСТОЧНИКИ
- https://it.wikireading.ru/1427
2. А так же дополнение к инструкции:
Работа с элементом Timer в Visual c++
Разработайте приложение в Visual c++ «таймер» или «Секундомер«, которое при нажатии на кнопку начинает или приостанавливает отсчет времени в секундах
Целью данного урока является ознакомление с объектом Visual c++ timer, рассмотрение его свойств и метода Tick.
Инструментарий:
объект свойство name
форма
текстовое поле (textbox) txtSeconds
текстовое поле (textbox) txtMinutes
таймер (timer) tmrSecundomer
кнопка (button)
Выполнение:
Создайте на новой форме два текстовых окна: для секунд (txtSeconds) и минут (txtMinutes).
Создайте элемент управления Timer (tmrSecundomer).
Этот элемент не отображается на форме, а потому размещается в нижней части экрана. Timer необходим, чтобы выполнять какие-либо действия через определенные промежутки времени, поэтому он невидим при работе приложения. Промежуток времени устанавливается свойством таймера Interval, которое измеряется в миллисекундах. Чтобы отсчитывать секунды необходимо установить значение 1000 для этого свойства.
Установите значение 1000 для свойства Interval элемента Timer.
Запрограммируйте событие Tick для таймера так, чтобы значение текстового окна секунд увеличивалось на единицу:
private: System::Void tmrSecundomer_Tick(…) {
int tmp= System::Int32::Parse(this-txtSeconds-Text);
tmp+=1;
this-txtSeconds-Text=tmp.ToString();
}
Событие Tick происходит по истечении времени в миллисекундах, указанного в свойстве Interval.
Создайте и запрограммируйте кнопку, которая будет запускать или останавливать Ваш секундомер. Для запуска и остановки отсчета времени используйте тот факт, что изначально таймер заблокирован, т.е. его свойство Enabled равно false. Чтобы запустить таймер необходимо установить это свойство в значение true и наоборот.
Запустите приложение. Щелкните по кнопке Старт и убедитесь, что значение окна секунд стало увеличиваться на единицу.
*Дополнительное задание:
Измените приложение так, чтобы время изменялось и в секундах и в минутах.
Добавьте кнопку Сброс, при нажатии на которую время на секундомере обнулялось бы.
Добавьте текстовое поле и найдите, как вывести в Visual c++ текущее время.
Вопросы для самоконтроля:
Каково основное назначение элемента управления Timer в Visual c++?
В каких единицах измеряется его свойство Interval?
С помощью какого события элемента управления Timer можно выполнять действия через заданные промежутки времени?
Каков стандартный префикс элемента управления Timer?
С помощью какой команды можно задать генерирование события Tick элемента управления Timer через каждые 2 секунды?
*- для тех, кто хотел бы получить две оценки
Урок окончен,
спасибо за внимание!