Сегодня существует множество мощнейших средств разработки программного обеспечения. Все они направлены на увеличение производительности труда программиста. При помощи многих из них решить простые задачи, например,
написать программу-часы, можно всего за несколько минут.
Статьи по теме:
- Как написать программу часы
- Как сделать программу-секундомер на Паскале
- Как написать приложение
Вам понадобится
- — компилятор;
- — пакеты разработчика;
- — опционально: интегрированная среда разработки (IDE).
Инструкция
Сформируйте заготовку или проект приложения, которое будет реализовывать часы. В случае если используется IDE, запустите мастер создания проектов, выберите тип приложения, каталог хранения файлов и другие опции. Сгенерируйте проект.
Как создать программу «ЧАСЫ» в блокноте
При отсутствии IDE добавьте нужные файлы вручную. Используйте подходящий текстовый редактор. Создайте сценарии для используемой системы сборки (make, cmake, nmake, и т.д.) или файл проекта, если применяются средства вроде qmake.
Разработайте интерфейс приложения. У такой простой программы как часы он может состоять всего из одного диалогового окна, в котором будет показано текущее время. Отображение текста в окне можно осуществлять непосредственно — при помощи доступных методов графического вывода. Однако гораздо удобнее использовать для этой цели походящие элементы управления. Если в IDE присутствует инструментарий для дизайна интерфейса, подготовьте в нем шаблон диалогового окна.
Добавьте в приложение функционал для обеспечения срабатывания определенного фрагмента кода через заданные промежутки времени. Как правило, это делается при помощи запуска таймера, обработчиком событий которого является функция или метод класса. Напишите код, реализующий подобный обработчик, а также код запуска таймера при инициализации приложения и остановки при завершении его работы. Период срабатывания таймера установите в районе 100-300 миллисекунд.
Реализуйте код обработчика событий таймера. Осуществляйте в нем получение текущего системного времени и его отображение в окне приложения. Получайте текущее время при помощи функций библиотеки C (localtime, localtime_r, gmtime, gmtime_r), платформ-специфических функций (таких как GetSystemTime в Windows) или соответствующих методов классов-оберток используемого фреймворка. Форматируйте полученное значение в строку и устанавливайте ее в качестве текста элемента управления, используемого для отображения времени или сохраняйте и выводите при обновлении окна с помощью соответствующих графических функций.
Проверьте работу созданной программы, реализующей часы. Соберите проект. Запустите полученный исполняемый модуль.
Источник: www.kakprosto.ru
Аналоговые часы на C#
Привет! Сегодня сделаем аналоговые часы на языке программировании C#.
Запускаем Visual Studio. Выбираем Создание проекта->Приложение Windows Forms (.NET Framework)->Создать.
Для самого окна сделаем размер: 350px на 350px в окне свойств.
Свойство FormBorderStyle для окна формы поставим в значение None, чтобы убрать границу у окна нашей программы.
Добавим на форму из Панели элементов PictureBox . Поставим так же размеры для PictureBox 350 и 350.
Свойство SizeMode для PictureBox установим в Zoom. Это растянет нашу картинку на всё окно формы. Свойство Dock установим в Fill. Это означает, что наша картинка будет размещена по центру окна формы.
Уже можно загрузить саму картинку циферблата. Будем использовать вот это изображение формата gif:
Загружаем данное изображение в свойство Image для PictureBox. Выбираем Локальный ресурс->Импорт.
Теперь, если мы запустим наш проект, то мы увидим, что мы не можем переносить мышкой наше окно. Чтобы исправить ситуацию, заходим в код нашей программы, нажав клавишу F7.
Настраиваем перемещение окна с помощью мыши.
C помощью команды using подключим пространство имён System.Runtime.InteropServices
. using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; // Подключаем новое пространство имён .
Подключаем функции из библиотеки user32.dll, которые помогут нам переносить окно с помощью мышки, кликая в любой точки этого окна.
. public partial class Form1 : Form < [DllImport(«user32», CharSet = CharSet.Auto)] internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam); [DllImport(«user32», CharSet = CharSet.Auto)] internal extern static bool ReleaseCapture(); .
А так же подключим обработчик события MouseDown (нажатия клавиши мыши) для нашей PictureBox. Кликаем на вкладку конструктор, выбираем в свойствах именно форму и нажимаем кнопку со значком молния . Там ищем событие MouseDown и кликаем два раза на поле, которое напротив слова MouseDown.
В появившийся функции обработчика события пропишем следующий код:
private void PictureBox1_MouseDown(object sender, MouseEventArgs e) < const uint WM_SYSCOMMAND = 0x0112; const uint DOMOVE = 0xF012; ReleaseCapture(); PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, 0); >
Запустим программу и увидим, что теперь можно перемещать окно, кликая по любой точке картинки.
Настраиваем прозрачность окна.
Чтобы у нас была только картинка циферблата, и не было видно самого окна, настроим прозрачность окна.
. public Form1() < InitializeComponent(); this.BackColor = Color.AliceBlue; this.TransparencyKey = this.BackColor; .
Формируем таймер и стрелки.
Заведём необходимые переменные:
. public partial class Form1 : Form < int cx = 175, cy = 175; // Центр картинки. int secHAND = 100, minHAND = 90, hrHAND = 75; Timer t = new Timer(); .
secHAND, minHAND, hrHAND — это длина в пикселях секундной стрелки, минутной и часовой соответственно.
Так же завели таймер t.
Перейдём в обработчик события Load (загрузка) для самой формы (по аналогии, как мы делали обработчик события MouseDown).
private void Form1_Load(object sender, EventArgs e) < t.Interval = 1000; //В миллисекундах t.Tick += new EventHandler(this.t_Tick); t.Start(); >
Теперь каждую секунду будет запускаться функция t_Tick(), которую мы пропишем ниже.
Стрелки будут идти от центра картинки. Центр имеет координаты x=175 (350/2), y=175 (350/2). Начало координат находится в верхнем левом углу.
Напишем функцию msCoord, которая будет получать количество секунд (или минут) и длину стрелки, а возвращать координаты конца секундной(минутной) стрелки.
private int[] msCoord(int val, int hlen) < int[] coord = new int[2]; val *= 6; if (val >= 0 val coord[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180)); coord[1] = cy — (int)(hlen * Math.Cos(Math.PI * val / 180)); > else < coord[0] = cx — (int)(hlen * -Math.Sin(Math.PI * val / 180)); coord[1] = cy — (int)(hlen * Math.Cos(Math.PI * val / 180)); > return coord; >
При отклонении на 1 секунду (или минуту), стрелка отклоняется на 6 градусов (360/60). В начале, функция узнаёт на сколько градусов отклоняется стрелка от начального положения (цифры 12).
Если прошло 5 секунд, стрелка отклонилась на 30 градусов. Тогда координата x=cx+l*sin(30), a y=cy-l*cos(30), где l-длина стрелки, cx и cy — центр картинки. Градусы нужно указывать в радианах (умножаем на пи и делим на 180 градусов угол отклонения).
В функции так же учтены знаки для синуса и косинуса для разных четвертей окружности. Так же учтено, когда нужно вычитать от сx и cy, а когда прибавлять.
Напишем функцию для получения координат конца часовой стрелки.
private int[] hrCoord(int hval, int mval, int hlen) < int[] coord = new int[2]; int val = (int)((hval * 30) + (mval * 0.5)); if (val >= 0 val coord[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180)); coord[1] = cy — (int)(hlen * Math.Cos(Math.PI * val / 180)); > else < coord[0] = cx — (int)(hlen * -Math.Sin(Math.PI * val / 180)); coord[1] = cy — (int)(hlen * Math.Cos(Math.PI * val / 180)); > return coord; >
Эта функция принимает и часы и минуты. Для часовой стрелки: 1 час — это 30 градусов (360/12), а одна минута — это 0.5 градусов.
1 час — 30 градусов
1/60 часа (1 минута) — x градусов
x = 1/60*30 = 0.5 градусов.
В остальном работает так же, как предыдущая функция.
Напишем главную функцию t_Tick.
private void t_Tick(object sender, EventArgs e) < //Берём время. int s = DateTime.Now.Second; int m = DateTime.Now.Minute; int h = DateTime.Now.Hour; int[] handCoord = new int[2]; Graphics g = pictureBox1.
CreateGraphics(); // Стираем предыдущее положения секундной стрелки handCoord = msCoord(s, secHAND + 4); g.DrawLine(new Pen(Color.White, 45f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); // Стираем предыдущее положение минутной стрелки handCoord = msCoord(m, minHAND + 4); g.
DrawLine(new Pen(Color.White, 40f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); // Стираем предыдущее положение часовой стрелки handCoord = hrCoord(h % 12, m, hrHAND + 4); g.DrawLine(new Pen(Color.White, 20f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); //Отрисовка стрелки часов.
handCoord = hrCoord(h % 12, m, hrHAND); g.DrawLine(new Pen(Color.Gray, 4f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); //Отрисовка минутной стрелки handCoord = msCoord(m, minHAND); g.
DrawLine(new Pen(Color.Black, 2f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); // Отрисовка секундной стрелки. handCoord = msCoord(s, secHAND); g.DrawLine(new Pen(Color.DarkOrange, 2f), new Point(cx, cy), new Point(handCoord[0], handCoord[1])); >
В начале функции берём системное время (часы, минуты, секунды). Создаём объект g типа Graphics, который позволит рисовать на нашей картинке (циферблате).
Узнаём координаты для секундной, минутной и часовой стрелки, и в начале проводим «толстые линии» белого цвета, которые должны стереть предыдущее изображение стрелок. Т.к для линий подобрана нужная толщина, то получается полностью закрасить предыдущее положение стрелок.
Затем уже, рисуем линии стрелок часов с нормальной толщиной и нужными нами цветами.
Каждую секунду стрелки прорисовываются заново. Для часов подставляем остаток от деления на 12 (h % 12), чтобы учесть, что 22-это 10 часов.
На этом всё! Будьте здоровы!
Если вам лень перепечатывать данный проект вручную, можете купить мой за 600 499 рублей.
Стоимость: 600 499 рублей.
Источник: code-enjoy.ru
Электронные часы, мультимедийная библиотека SFML для разработки игр на C++
Вариантов отобразить электронные часы на языке программирования С++ очень множество, в данной статье рассмотрим электронные часы для 2D игр написанных используя мультимедийную библиотеку SFML. Для удобства дальнейшего внедрения данного кода в наши проекты создадим класс электронные часы, в котором реализуем возможность менять шрифт, размер и цвет электронных часов.
Шаблон кода SFML C++
#include using namespace sf; int main() < // Графическое окно размером 900х900 с названием «Часы» RenderWindow window(VideoMode(900, 900), L»Часы», Style::Default); // Иконка графического окна Image icon; if (!icon.loadFromFile(«Image/clock.png»)) //Загрузка иконки < return 3; // Возвращает 3 если иконка не загрузилась >window.setIcon(128, 128, icon.getPixelsPtr()); // Ссылка на иконку // Рабочий цикл графического окна while (window.isOpen()) < // Переменная для хранения события Event event; // Цикл обработки событий while (window.pollEvent(event)) < // Обработка события нажатия на крестик графического окна if (event.type == Event::Closed) window.close(); >// Очистка графического окна, с окраской фона в синий цвет window.clear(Color::Blue); // Вывод графики в графическое окно window.display(); > return 0; >
Если Вы с первой часть справились успешно, тогда можем добавить к нашему проекту новый класс назовём его SFMLWorldTime.
Объявление закрытых свойств класса SFMLWorldTime, файл SFMLWorldTime.h
#pragma once #include class SFMLWorldTime < struct tm newtime; __time64_t long_time; errno_t err; int position_x, position_y; int font_size; sf::Font time_font; sf::Color time_color; sf::Text clock_text; >;
newtime содержит необходимые поля для отображения времени: часы, минуты и секунды. long_time — переменная системного времени. err — сохраняет код ошибки при неверном подключении времени.
position_x, position_y — координаты электронных часов.
font_size — размер шрифта электронных часов.
time_font — хранит шрифт электронных часов. Переменная time_color хранит цвет электронных часов. clock_text — текстовый объект, который рисует элементы электронных часов в графическом окне.
Объявление закрытых методов класса SFMLWorldTime, файл SFMLWorldTime.h
void InitText(); void what_time();
Метод InitText устанавливает настройки объекта clock_text.
Метод what_time записывает текущее системное время в структуру newtime.
Определение закрытых методов класса SFMLWorldTime, файл SFMLWorldTime.cpp
void SFMLWorldTime::InitText() < clock_text.setFont(time_font); // тип шрифта clock_text.setCharacterSize(font_size); // размер шрифта clock_text.setFillColor(time_color); // цвет шрифта >void SFMLWorldTime::what_time() < _time64( // получаем системное время // записываем системное время в структуру newtime err = _localtime64_s(long_time); if (err) exit(23); // при возникновении ошибки выходим из программы и возвращаем код ошибки 23 >
Объявление конструктора класса SFMLWorldTime, файл SFMLWorldTime.h
public: SFMLWorldTime(int x = 50, int y = 50, int size = 3, sf::Color mycolor = sf::Color::White, std::string font = «lib/Электро.ttf»);
Определение конструктора класса SFMLWorldTime, файл SFMLWorldTime.cpp
SFMLWorldTime::SFMLWorldTime(int x, int y, int size, sf::Color mycolor, std::string font) < (size >10) ? size = 10 : (size
Объявление открытых методов класса SFMLWorldTime, файл SFMLWorldTime.h
void setposition(int x, int y); void setcolor(sf::Color color); void setTime_size(int size); int getsec(); int getmin(); int gethour(); void drawTime(sf::RenderWindow
Методы: setposition, setcolor, setTime_size устанавливаю свойства электронных часов, координаты, цвет и размер.
Методы: getsec, getmin, gethour, возвращаю целочисленное значение системного времени секунды, минуты, часы.
Метод drawTime рисует электронные часы в графическом окне. В параметрах передаётся объект графическое окно.
Определение открытых методов класса SFMLWorldTime, файл SFMLWorldTime.cpp
void SFMLWorldTime::setposition(int x, int y) < position_x = x; position_y = y; >void SFMLWorldTime::setcolor(sf::Color color) < time_color = color; InitText(); >void SFMLWorldTime::setTime_size(int size) < (size >10) ? size = 10 : (size < 1) ? size = 1 : size = size; font_size = size * 10; InitText(); >int SFMLWorldTime::getsec() < what_time(); // обновление свойств структуры newtime return newtime.tm_sec; >int SFMLWorldTime::getmin() < what_time(); return newtime.tm_min; >int SFMLWorldTime::gethour()
Определение метода drawTime
void SFMLWorldTime::drawTime(sf::RenderWindow what_time(); std::string tmpstr; if (newtime.tm_hour < 10) < tmpstr = «0»; tmpstr.append(std::to_string(newtime.tm_hour)); >else tmpstr = std::to_string(newtime.tm_hour); tmpstr.append(«:»); if (newtime.tm_min
В методе drawTime проверяется условие для отображения элементов электронных часов, если элемент, например секунды меньше 10, тогда к нему добавляется ноль, который устанавливается перед секундами. Все элементы электронных часов склеиваются в одну строку с помощью метода append() и сохраняются в переменную tmpstr. Функция to_string() переводит целое значение в строковое.
После формирования строки с электронными часами, она выводится в графическое окно с помощью объекта window и метода draw().
Объект электронные часы SFMLWorldTime.
В функции main объявляем тип SFMLWorldTime (электронные часы) и с помощью цикла for выводим в графическое окно 10 электронных часов разных размеров.
#include «SFMLWorldTime.h» using namespace sf; int main() < RenderWindow window(VideoMode(900, 900), L»Часы», Style::Default); Image icon; if (!icon.loadFromFile(«Image/clock.png»)) < return 3; >window.setIcon(128, 128, icon.getPixelsPtr()); SFMLWorldTime mytime(50,50,4); mytime.setcolor(Color::Yellow); while (window.isOpen()) < Event event; while (window.pollEvent(event)) < if (event.type == Event::Closed) window.close(); >window.clear(Color::Blue); for (int i = 10, kof = 0, kof2 = 20, posy = 50, posx = 200; i > 0; i—, kof += 10, posy += 130 — kof, kof -= 2, posx += kof2) < mytime.setTime_size(i); mytime.setposition(posx, posy); mytime.drawTime(window); >window.display(); > return 0; >
Полный код файла SFMLWorldTime.h
#pragma once #include class SFMLWorldTime < struct tm newtime; __time64_t long_time; errno_t err; int position_x, position_y; int font_size; sf::Font time_font; sf::Color time_color; sf::Text clock_text; void InitText(); void what_time(); public: SFMLWorldTime(int x = 50, int y = 50, int size = 3, sf::Color mycolor = sf::Color::White, std::string font = «lib/Электро.ttf»); void setposition(int x, int y); void setcolor(sf::Color color); void setTime_size(int size); int getsec(); int getmin(); int gethour(); void drawTime(sf::RenderWindow >;
Полный код файла SFMLWorldTime.cpp
#include «SFMLWorldTime.h» SFMLWorldTime::SFMLWorldTime(int x, int y, int size, sf::Color mycolor, std::string font) < (size >10) ? size = 10 : (size < 1) ? size = 1 : size = size; position_x = x; position_y = y; if (!time_font.loadFromFile(font)) exit(13); time_color = mycolor; font_size = size * 10; InitText(); >void SFMLWorldTime::drawTime(sf::RenderWindow what_time(); std::string tmpstr; if (newtime.tm_hour < 10) < tmpstr = «0»; tmpstr.append(std::to_string(newtime.tm_hour)); >else tmpstr = std::to_string(newtime.tm_hour); tmpstr.append(«:»); if (newtime.tm_min < 10) tmpstr.append(«0»); tmpstr.append(std::to_string(newtime.tm_min)); tmpstr.append(«:»); if (newtime.tm_sec < 10) tmpstr.append(«0»); tmpstr.append(std::to_string(newtime.tm_sec)); clock_text.setPosition(position_x, position_y); clock_text.setString(tmpstr); window.draw(clock_text); >void SFMLWorldTime::InitText() < clock_text.setFont(time_font); clock_text.setCharacterSize(font_size); clock_text.setFillColor(time_color); >void SFMLWorldTime::what_time() < _time64( err = _localtime64_s(long_time); if (err) exit(23); >void SFMLWorldTime::setposition(int x, int y) < position_x = x; position_y = y; >void SFMLWorldTime::setcolor(sf::Color color) < time_color = color; InitText(); >void SFMLWorldTime::setTime_size(int size) < (size >10) ? size = 10 : (size < 1) ? size = 1 : size = size; font_size = size * 10; InitText(); >int SFMLWorldTime::getsec() < what_time(); return newtime.tm_sec; >int SFMLWorldTime::getmin() < what_time(); return newtime.tm_min; >int SFMLWorldTime::gethour()
Более подробную инструкцию вы можете получить посмотрев видео «Электронные часы SFML C++».
Источник: habr.com