Включаем компьютер и запускаем наше средство для разработки - XE5. Создаём новый проект, с такой же, пустой формой. (Как это сделать я показывал в предыдущей статье)
Кидаем на форму TLabel, TButton и TEdit, как это сделать я тоже показывал в прошлой статье. Располагаем и меняем Text как-нибудь вот так:
Как вы видите, у Edit'a свойство Text менять можно тоже. То, что там написано и будет написано в нём при запуске программы. Это значение можно удалить или изменить по ходу выполнения программы. И да, не забудьте поставить якори - анкоры к компонентам.
Теперь, пора познакомиться с ещё одним прекрасным свойством TEdit'a. Наверняка, неудобно нажать на Edit и увидеть клавиатуру для ввода букв в цифровом поле. По этому, сделаем сразу открывание цифровой клавиатуры. Значит как, открываем опять свойства Edit'a, ищем KeyboardType. Это и есть тип клавиатуры которая будет открываться при нажатии на поле. Меняем на vktNumberPad.
Ещё хотелось бы свойство "NumberOnly", но оно присутствует только в TEdit'e компьютерном. Так что напишем чуть позже небольшую проверку на валидность введённого.
А, да, чуть не забыл. Нужно ещё поставить на форму TTimer, с вкладки "System".
То, как вы его расположите - не имеет никакого значения. Этот компонент рабочий, но невидимый человеческому глазу.
А, ещё надо его выключить, чтобы он не работал при включении программы. Мы будем его включать по нажатию на кнопку. Чтобы выключить его, нужно свойство: "Enabled" c "true" махнуть на "false".
Теперь, нажмём в самом низу страницы на "Code" и приступим к написанию функции.
Пишем примерно такой код:
Минутку, подождите, объясню что к чему.
function - ключевое слово. Это как "procedure" создающиеся при двойном клике.
isnumber - это название функции.
(s:string) - это как бы ввод переменной для работы с функцией. Значит, в скобках не может быть значение другого типа. Ну, к концу урока поймёте подробнее.
: boolean - это выхлоп. Т.е. то, что функция вернёт.boolean - это тип. Он, в отличии от String'a, Integer'a, real'a и т.п. условный. Ну, он может быть равный только "true" или "false". Ровно так же, как поля некоторые в свойствах.
Ну, наверняка что-то ещё не понятно. Примеры кодом дальше уже развеят ваши непонятки.
Проверять, число ли введено мы будем при помощи условия try .. except .. end; - это самый простой для понимания, но не самый лёгкий для устройства способ. Потом возможно покажу другой способ. Полегче для девайса, но тяжелее для восприятия.
Смотрите:
Result - это переменная ответа. Как бы функция вернёт в ответ то, что получилось именно в этой переменной. Она кстати и есть у нас типа Boolean.
Значит суть метода:
Если из String не получается преобразовать в Integer, значит в переменной есть символы не являющиеся числами. Собственно, обработчик try..except..end; - обработчик ошибок. Т.е. если строчка между try и except не может выполниться по какой-либо причине, то срабатывает то, что находится между except и end.
Значит что, выходит если получается преобразовать из String в Integer, то Result так и останется true. Иначе - false. Если функция будет возвращать true, значит да, в переменной числа. Иначе - нет. Сейчас узнаете.
Теперь, поднимитесь вверх, туда где var. Нужно добавить переменную. К примеру, i - типа integer.
Значит, теперь возвращаемся на форму.
Клацаем дважды по кнопке, создаётся обработчик нажатия по кнопке в запущенной программе. Пишем такой код:
Сейчас помогу разобраться.
if (если) isnumber(Edit1.Text) = true (функция вернула "true") then (тогда)
begin (начало действий, выполняемых если функция вернула "true")
i:=StrToInt(Edit1.Text); ( i := (присваиваем переменной i) StrToInt - функция, конвертирующая из String'a в Integer на одно действие. т.е. только на присвоение. Из String'a в Integer конвертируем как раз таки значение из Edit'a чтобы присвоить переменной значение. Которая типа Integer.)
Timer1.Enabled:=true; (Включаем Enabled таймера. Присваиваем просто "true". Это делается как раз так.)
end (Конец действий, если функция вернула "true")
else (Иначе. Т.е. если функция вернула "false" или что-то другое)
begin (Начало действий если функция вернула "false" или что-то другое)
showmessage('Некорректное значение!'); (Выводим сообщение о "некорректном значении")
end; (конец действий если функция вернула "false" или что-то другое)
Теперь, опять возвращаемся к форме и клацаем теперь по таймеру дважды. Сгенерируется обработчик событий, который срабатывает раз в N ms. Эти миллисекунды указываются в свойстве "Interval" у таймера.
По умолчанию 1000 ms, т.е. одна секунда. Всё отлично.
Пишем сюда такой код:
По сути, та же самая конструкция.
Если i = 0, тогда пишем "Скидыщ!!! И выключаем таймер. Иначе просто отнимаем от i единицу и присваиваем Text'y label'a то, сколько секунд осталось до "взрыва".
Можно подключать девайс (если не подключен), и клацать F9.
P.S. Меня много что отвлекало при написании статьи. Возможно что - то упустил, подскажите - дополню. Если есть вопросы - спрашивайте, отвечу.