Вход Регистрация Забыли пароль ?

skype: megainformatic, телеграм: megainformatic, онлайн-чат (megainformatic live chat), форма обратной связи

Онлайн Школа Компьютерных Наук Андрея Синицина

Онлайн Школа Компьютерных Наук Андрея Синицина - автор

Добро пожаловать в нашу школу ! Давайте вместе откроем путь к новым перспективам !!!

Приложение времени - разработка приложения на delphi 7



В данном уроке мы рассмотрим простой пример приложения для работы с
системными датой и временем, а реализуем его на delphi в среде delphi 7.


Вы наверное слышали о Машине Времени ?

А как насчет Приложения Времени ?

Давайте попробуем создать такое приложение.

Для начала оно должно отображать на своей форме
текущее системное время -

Дату и время

т. е.

день-месяц-год час:мин:сек

Приложение времени - шаг 1


Для этого нужно добавить на форму компонент TLabel из вкладки компонентов Standard

Приложение времени - шаг 2.1 - добавляем на форму TLabel из вкладки компонентов Standard

назвав TimeLabel1

и 
TTimer из вкладки System

Приложение времени - шаг 2.2 - добавляем на форму TTimer из вкладки компонентов System

назвав

TimeTimer1

Приложение времени - шаг 2 - добавляем на форму TLabel и TTimer

сгенерируем событие

OnTimer

для этого выберем в Object TrewView или на форме
компонент TimeTimer1 и в Object Inspector
откроем вкладку Events и дважды кликнем в поле
OnTimer

Приложение времени - шаг 3 - сгенерируем событие OnTimer


------------------------------------------------------------------
ОБРАТИТЕ ВНИМАНИЕ !!!

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

ОБРАТИТЕ ВНИМАНИЕ !!!
------------------------------------------------------------------






будет сгенерирован обработчик события

TForm1.TimeTimer1Timer

и в нем запишем такой код -


procedure TForm1.TimeTimer1Timer(Sender: TObject);
var
  CurrTime: TDateTime;
  year, month, day, h, m, s, ms: Word;
begin
  CurrTime := Time;
  DecodeDate(CurrTime, year, month, day);
  DecodeTime(CurrTime, h, m, s, ms);

  TimeLabel1.Caption :=
    IntToStr(day) + '-' +
    IntToStr(month) + '-' +
    IntToStr(year) + ' ' +
    IntToStr(h) + ':' + IntToStr(m) + ':' + IntToStr(s);
end;

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




Выполним сборку нашего приложения -

Project > Build

Приложение времени - шаг 5 - Выполним сборку нашего приложения - Project > Build

запустим полученный exe файл и увидим, что

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

TimeLabel1

Приложение времени - шаг 5 - приложение работает, отображая текущую дату и время, но в первую секунду работы мы видим не текущее время, а надпись TimeLabel1

Приложение времени - шаг 5 - в последующем уже отображается текущее время



чтобы приложение отображало текущую дату и время сразу
после старта

сгенерируем обработчик события

TForm1.FormCreate

и в нем просто добавим вызов метода

TimeTimer1Timer(Sender);

Приложение времени - шаг 6 - сгенерируем обработчик события TForm1.FormCreate

Чтобы это произошло аналогично, как мы делали обработчик для TimeTimer1.OnTimer
нужно выбрать форму Form1 в Object TreeView, а затем кликнуть дважды
в поле OnCreate на вкладке Events в окне Object Inspector.


получив код обработчика

procedure TForm1.FormCreate(Sender: TObject);
begin
  
end;


просто добавляем в него строку кода


TimeTimer1Timer(Sender);


получим - 

procedure TForm1.FormCreate(Sender: TObject);
begin
  TimeTimer1Timer(Sender);
end;


выполняем сборку нашего приложения (Project > Build), затем запускаем
получившийся exe файл и наблюдаем результат.

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

Приложение времени - шаг 1


Попробуем разобраться как работает наше приложение.

Компонент TimeTimer1 генерирует системное событие запуска
таймера и каждые 1000 мс, то есть каждую секунду
вызывает метот в обработчике OnTimer.

Интервал 1000 мс можно задать и другой,
TimeTimer1.Interval,

но для таймера
будет вполне достаточно 1000 мс, т. к. нам не нужно
знать текущее время чаще, чем каждую секунду.

Ну а в самом методе просто запрашивается текущая дата,
а затем время.

Полученные данные преобразуются в строковый тип и
сформированная таким образом строка присваивается свойству
TimeLabel1.Caption

ну и поскольку метод вызывается при старте приложения -
в обработчике создания формы
TForm1.FormCreate,
а также затем каждую секунду
в обработчике
TForm1.TimeTimer1Timer

то собственно мы и видим результаты работы -

при старте приложения оно сразу же отображает в компоненте TimeLabel1 текущую
дату и время, а затем каждую секунду эта информация обновляется.

Приложение времени - шаг 1


При желании у компонента TimeLabel1 можно задать более крупный размер шрифта для отображения
даты-времени.
TimeLabel1.Font.Size

Приложение времени - шаг 7 - При желании у компонента TimeLabel1 можно задать более крупный размер шрифта для отображения даты-времени

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

и еще у формы я настроил такое свойство -

Form1.Position := poDesktopCenter;

чтобы окно формы выводилось по центру экрана.

Все эти свойства задаются через инспектор объектов (Object Inspector), а не через код.


Кстати, если Вы заметили, текущая дата отображается в приложении неправильно.

Вместо текущего дня, месяца и года отображается дата

30-12-1899

чтобы исправить нужно написать такой код

procedure TForm1.TimeTimer1Timer(Sender: TObject);
var
  CurrTime: TDateTime;
  year, month, day, h, m, s, ms: Word;
begin
  CurrTime := Date;
  DecodeDate(CurrTime, year, month, day);
  CurrTime := Time;
  DecodeTime(CurrTime, h, m, s, ms);

  TimeLabel1.Caption :=
    IntToStr(day) + '-' +
    IntToStr(month) + '-' +
    IntToStr(year) + ' ' +
    IntToStr(h) + ':' + IntToStr(m) + ':' + IntToStr(s);
end;


То есть строкой
CurrTime := Date; //мы теперь запрашиваем текущую дату, чего не делали вызывая

CurrTime := Time; //т. к. он возвращает только текущее время, а дату возвращает в значении
//по-умолчанию т. е. такую с которой начинается отсчет системного времени.

Теперь дата в вашем приложении (после выполнения сборки и запуска exe)
должна отображаться правильно.


Приложение времени - шаг 9 - Теперь дата в вашем приложении (после выполнения сборки и запуска exe) должна отображаться правильно.




Интересный момент - можем ли мы останавливать вызовы 
TForm1.TimeTimer1Timer
каждую секунду ?

Да можем, и это легко проверить -
мы можем создать на форме две кнопки start и stop,
для которых сгенерировать такие обработчики
OnClick

Приложение времени - шаг 10 - кнопки start и stop

procedure TForm1.StartButton1Click(Sender: TObject);
begin
  TimeTimer1.Enabled := True;
end;

procedure TForm1.StopButton1Click(Sender: TObject);
begin
  TimeTimer1.Enabled := False;
end;

Выполняем сборку нашего приложения и запускаем полученный exe файл.

Приложение времени - шаг 10 - кнопки start и stop - работа приложения в действии



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

Ну а, как Вы уже догадались, возобновить показ текущего времени мы
можем кнопкой start.

Все что происходит в этих обработчиках -

кнопка stop останавливает таймер TimeTimer1 устанавливая его свойств
Enabled в False.

Ну а клик по кнопке start делает обратное действие. И показ времени
снова возобновляется.

Также логично будет, что если часы уже идут, то нажатие start не приводит
ни к какому эффекту, потому что таймер уже итак запущен.

А нажатие stop, когда показ времени остановлен, также ни к чему не приводит.




Давайте попробуем сделать наше приложение более удобным в плане использования
кнопок start/stop.

Сделаем всего одну кнопку, которая будет то останавливать, то запускать показ
времени, а также будет меняться название кнопки в соответствии с тем, какое
состояние можно включить по клику на неё.

Итак, пробуем.

Обработчик для кнопки stop удалим, 
для этого нужно удалить название метода из поля
StopButton1.OnClick 
в инспекторе объектов.

Удалить весь код внутри обработчика, чтобы
он выглядел так -

procedure TForm1.StopButton1Click(Sender: TObject);
begin
   
end;

После нажатия на кнопку Сохранить (Save All) среда Delphi
автоматически удалит код обработчика из модуля clockUnit1.pas

а также удалим и саму кнопку с формы.

Кнопку start назовем StartStopButton1.

И в ней запишем новый код для обработчика

OnClick.

Он будет таким -

procedure TForm1.StartButton1Click(Sender: TObject);
begin
  TimeTimer1.Enabled := not TimeTimer1.Enabled;

  if ( TimeTimer1.Enabled ) then begin
    StartButton1.Caption := 'stop';
  end
  else begin
    StartButton1.Caption := 'start';
  end;  
end;

Приложение времени - шаг 11 - кнопка start/stop


Обратите внимание, что в обработчик 
TForm1.FormCreate

я добавил такую строку кода -
StartButton1.Caption := 'stop';

то есть весь обработчик полностью выглядит так (как на скриншоте выше) -

procedure TForm1.FormCreate(Sender: TObject);
begin
  TimeTimer1Timer(Sender);
  StartButton1.Caption := 'stop'; //эту строку я добавил для того,
  //чтобы в начальный момент кнопка имела надпись stop - т. к. сразу
  //после старта приложения таймер уже запущен
end;







После сборки приложения и запуска Вы увидите, как это все работает.

Нажимаем на stop - обновление текущего времени прекращается, а на
кнопке возникает надпись - start.

Приложение времени - шаг 11 - кнопка start/stop - приложение в действии - обновление времени остановлено

Нажимаем start - и все будет наоборот.

Приложение времени - шаг 11 - кнопка start/stop - приложение в действии - обновление времени возобновлено



Необычное применение созданного приложения.


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

То есть мы с вами получили не просто приложение для отслеживания текущего
времени, но практически собственный планировщик задач !

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

Можно выполнять и какие-то иные полезные действия.

Конечно мы имеем дело с самым простым видом планировщика задач, он
после завершения работы приложения не будет оставаться запущенным
в фоновом режиме и не будет отслеживать текущее время чтобы
запустить задачу.

Но ведь все это можно легко наверстать ! Главное, что мы уже получили
какую-то основу, с которой можно начать разработку.

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

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

И значит такое приложение может работать даже без участия пользователя !



Вы можете скачать исходный код приложения в виде zip архива.

Внутри уже есть собранный exe файл, а для самостоятельной сборки
Вам понадобится среда разработки delphi 7 или выше.

Размер файла: 203 Kb.

оцените статью:
0
Понравилось!
0
Не понравилось!
 

Оставленные комментарии


kroninger,  18 марта 2021

супер !


grue,  18 марта 2021

мне понравилось.


admin,  18 марта 2021

Спасибо !


megainformatic 2006 - 2022 карта сайта




Посетили страницу: 413