skype: 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 - 2024 карта сайта