teams: megainformatic, телеграм: megainformatic, онлайн-чат (megainformatic live chat), форма обратной связи
Онлайн Школа Компьютерных Наук Андрея Синицина

Добро пожаловать в нашу школу ! Давайте вместе откроем путь к новым перспективам !!!
Приложение времени - разработка приложения на delphi 7
В данном уроке мы рассмотрим простой пример приложения для работы с системными датой и временем, а реализуем его на delphi в среде delphi 7. Вы наверное слышали о Машине Времени ? А как насчет Приложения Времени ? Давайте попробуем создать такое приложение. Для начала оно должно отображать на своей форме текущее системное время - Дату и время т. е. день-месяц-год час:мин:секДля этого нужно добавить на форму компонент TLabel из вкладки компонентов Standard
назвав TimeLabel1 и TTimer из вкладки System
назвав TimeTimer1
сгенерируем событие OnTimer для этого выберем в Object TrewView или на форме компонент TimeTimer1 и в Object Inspector откроем вкладку Events и дважды кликнем в поле 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;
Выполним сборку нашего приложения - Project > Build
запустим полученный exe файл и увидим, что приложение работает, отображая текущую дату и время, но в первую секунду работы мы видим не текущее время, а надпись TimeLabel1
![]()
чтобы приложение отображало текущую дату и время сразу после старта сгенерируем обработчик события TForm1.FormCreate и в нем просто добавим вызов метода TimeTimer1Timer(Sender);
Чтобы это произошло аналогично, как мы делали обработчик для 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 файл и наблюдаем результат. Теперь в первую же секунду своей работы приложение сразу отображает текущую дату и время.
Попробуем разобраться как работает наше приложение. Компонент TimeTimer1 генерирует системное событие запуска таймера и каждые 1000 мс, то есть каждую секунду вызывает метот в обработчике OnTimer. Интервал 1000 мс можно задать и другой, TimeTimer1.Interval, но для таймера будет вполне достаточно 1000 мс, т. к. нам не нужно знать текущее время чаще, чем каждую секунду. Ну а в самом методе просто запрашивается текущая дата, а затем время. Полученные данные преобразуются в строковый тип и сформированная таким образом строка присваивается свойству TimeLabel1.Caption ну и поскольку метод вызывается при старте приложения - в обработчике создания формы TForm1.FormCreate, а также затем каждую секунду в обработчике TForm1.TimeTimer1Timer то собственно мы и видим результаты работы - при старте приложения оно сразу же отображает в компоненте TimeLabel1 текущую дату и время, а затем каждую секунду эта информация обновляется.
При желании у компонента TimeLabel1 можно задать более крупный размер шрифта для отображения даты-времени. TimeLabel1.Font.Size
![]()
и еще у формы я настроил такое свойство - 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) должна отображаться правильно.
Интересный момент - можем ли мы останавливать вызовы TForm1.TimeTimer1Timer каждую секунду ? Да можем, и это легко проверить - мы можем создать на форме две кнопки start и stop, для которых сгенерировать такие обработчики OnClick
procedure TForm1.StartButton1Click(Sender: TObject); begin TimeTimer1.Enabled := True; end; procedure TForm1.StopButton1Click(Sender: TObject); begin TimeTimer1.Enabled := False; end; Выполняем сборку нашего приложения и запускаем полученный exe файл.
Теперь если мы нажмем кнопку 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;
Обратите внимание, что в обработчик TForm1.FormCreate я добавил такую строку кода - StartButton1.Caption := 'stop'; то есть весь обработчик полностью выглядит так (как на скриншоте выше) - procedure TForm1.FormCreate(Sender: TObject); begin TimeTimer1Timer(Sender); StartButton1.Caption := 'stop'; //эту строку я добавил для того, //чтобы в начальный момент кнопка имела надпись stop - т. к. сразу //после старта приложения таймер уже запущен end; После сборки приложения и запуска Вы увидите, как это все работает. Нажимаем на stop - обновление текущего времени прекращается, а на кнопке возникает надпись - start.
Нажимаем start - и все будет наоборот.
Необычное применение созданного приложения. Наше Приложение Времени, в отличие от системного приложения Windows, которое тоже отображает дату и текущее время, имеет один существенный плюс - мы можем не только отображать текущее время, но и написать какой-то код, который в зависимости от текущего времени может выполнять какие-то действия. То есть мы с вами получили не просто приложение для отслеживания текущего времени, но практически собственный планировщик задач ! Например можно написать код, который через заданные интервалы времени будет запускать какое-то другое приложение. Можно выполнять и какие-то иные полезные действия. Конечно мы имеем дело с самым простым видом планировщика задач, он после завершения работы приложения не будет оставаться запущенным в фоновом режиме и не будет отслеживать текущее время чтобы запустить задачу. Но ведь все это можно легко наверстать ! Главное, что мы уже получили какую-то основу, с которой можно начать разработку. И вы видите, что даже очень простые на первый взгляд приложения и выполняемые ими задачи могут послужить основой для чего-то более крупного и сложного. Если с использованием основ нашего Приложения Времени разработать какие-то задачи, которые бы выполнялись в заданное время или через заданные интервалы времени - мы получим уже не просто Приложение Времени, а Умное Приложение Времени, которое не только может отсчитывать текущее время, но и выполнять запланированные задачи и действия. И значит такое приложение может работать даже без участия пользователя ! Вы можете скачать исходный код приложения в виде zip архива. Внутри уже есть собранный exe файл, а для самостоятельной сборки Вам понадобится среда разработки delphi 7 или выше. Размер файла: 203 Kb.
оцените статью:
0

0

megainformatic 2006 - 2025 карта сайта
Для этого нужно добавить на форму компонент TLabel из вкладки компонентов Standard
назвав TimeLabel1
и
TTimer из вкладки System
назвав
TimeTimer1
сгенерируем событие
OnTimer
для этого выберем в Object TrewView или на форме
компонент TimeTimer1 и в Object Inspector
откроем вкладку Events и дважды кликнем в поле
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;
Выполним сборку нашего приложения -
Project > Build
запустим полученный exe файл и увидим, что
приложение работает, отображая текущую дату и время,
но в первую секунду работы мы видим не текущее время,
а надпись
TimeLabel1
Чтобы это произошло аналогично, как мы делали обработчик для 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 файл и наблюдаем результат.
Теперь в первую же секунду своей работы приложение сразу отображает
текущую дату и время.
и еще у формы я настроил такое свойство -
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)
должна отображаться правильно.
Интересный момент - можем ли мы останавливать вызовы
TForm1.TimeTimer1Timer
каждую секунду ?
Да можем, и это легко проверить -
мы можем создать на форме две кнопки start и stop,
для которых сгенерировать такие обработчики
OnClick
procedure TForm1.StartButton1Click(Sender: TObject);
begin
TimeTimer1.Enabled := True;
end;
procedure TForm1.StopButton1Click(Sender: TObject);
begin
TimeTimer1.Enabled := False;
end;
Выполняем сборку нашего приложения и запускаем полученный exe файл.
Теперь если мы нажмем кнопку 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;
Обратите внимание, что в обработчик
TForm1.FormCreate
я добавил такую строку кода -
StartButton1.Caption := 'stop';
то есть весь обработчик полностью выглядит так (как на скриншоте выше) -
procedure TForm1.FormCreate(Sender: TObject);
begin
TimeTimer1Timer(Sender);
StartButton1.Caption := 'stop'; //эту строку я добавил для того,
//чтобы в начальный момент кнопка имела надпись stop - т. к. сразу
//после старта приложения таймер уже запущен
end;
После сборки приложения и запуска Вы увидите, как это все работает.
Нажимаем на stop - обновление текущего времени прекращается, а на
кнопке возникает надпись - start.
Нажимаем start - и все будет наоборот.
Необычное применение созданного приложения.
Наше Приложение Времени, в отличие от системного приложения Windows,
которое тоже отображает дату и текущее время, имеет
один существенный плюс - мы можем не только отображать текущее
время, но и написать какой-то код, который в зависимости от текущего
времени может выполнять какие-то действия.
То есть мы с вами получили не просто приложение для отслеживания текущего
времени, но практически собственный планировщик задач !
Например можно написать код, который через заданные интервалы времени
будет запускать какое-то другое приложение.
Можно выполнять и какие-то иные полезные действия.
Конечно мы имеем дело с самым простым видом планировщика задач, он
после завершения работы приложения не будет оставаться запущенным
в фоновом режиме и не будет отслеживать текущее время чтобы
запустить задачу.
Но ведь все это можно легко наверстать ! Главное, что мы уже получили
какую-то основу, с которой можно начать разработку.
И вы видите, что даже очень простые на первый взгляд приложения и выполняемые
ими задачи могут послужить основой для чего-то более крупного и сложного.
Если с использованием основ нашего Приложения Времени разработать какие-то
задачи, которые бы выполнялись в заданное время или через заданные
интервалы времени - мы получим уже не просто Приложение Времени, а Умное Приложение Времени,
которое не только может отсчитывать текущее время, но и выполнять
запланированные задачи и действия.
И значит такое приложение может работать даже без участия пользователя !
Вы можете скачать исходный код приложения в виде zip архива.
Внутри уже есть собранный exe файл, а для самостоятельной сборки
Вам понадобится среда разработки delphi 7 или выше.
Размер файла: 203 Kb.