Ну вот и настало время разобраться с датой и временем на языке МидлетПаскаль. Для чего это нужно? Ну хотя бы для того, чтоб твоя прога знала который сейчас час и какой год? Вдруг прохожий спросит, а ты ему свою прогу засветишь! :) А вообще дата и время очень часто нужны. Например, если ты читал предыдущие статьи, то ты умеешь работать с ресурсами и музыкой, теперь ты узнаешь работу с датой и временем. Вот уже основа для написания своего будильника. Очень часто в играх приходится работать с временем, определять промежутки между какими-то событиями и, отталкиваясь от этой разницы, прога реагирует. Ну хватит разговоров, давай кодить! Создовай новый проект, сразу вводи две переменные типа integer, три текстовые переменные (string), и один массив строковых переменных (array [1..7] of string Здесь массив из семи чисел, для определения дня недели.). Я их назвал так : числовые - Time, DayOfWeek, текстовые - DateText, TimeText, DayText и массив - week. Из этих имён можно понять, для чего они предназначены - для хранения даты, времени, текста и др. Теперь переходи в тело программы и присваивай переменной Time функцию GetCurrentTime. Эта функция возвращает текущее время в течение секунд с полуночи первого января 1970. Возвращанная величина ( время в секундах), может быть использована как аргумент для вызова других функций по определению месяца, дня, минут и прочего. Про эти функции мы поговорим ниже. Итак, мы получили текущее время, это, как оказалось, ключ ко всем другим значениям. Теперь давай определимся каким образом прога будет оповещать нас. Ну я не стал заморачиваться и просто выводил текст функцией DrawText. А текст будет такой : Дата - ...дальше идёт дата... Время - ...дальше идёт время... День недели - ...дальше идёт день недели... Тепрерь надо получить текущую дату, а делается это вот так: DateText :='Дата - ' + GetDay(Time); DateText :=DateText + ':' + GetMonth(Time); DateText :=DateText + ':' + GetYear(Time); Первой строкой мы присваиваем текстовой переменной DateText слово Дата - и добовляем текущий день месяца функцией GetDay(Time). В качестве единственного параметра мы указываем значение переменной Time, полученное ранее. Эта переменная содержит текущее время, и оттталкиваясь от него функция GetDay(Time) выдаёт нам номер дня в месяце, значение колеблется от 1 до 31 (как в нормальных месецах :) ). Следующими двумя строками добовляем к переменной DateText значение месяца и года функциями GetMonth(Time) и GetYear(Time) соответственно. Функции эти идентичны GetDay(Time), только значения возвращают другие. Ну а в качестве разделителя между днём, месецем и годом используем знак двоеточия ":" Теперь займёмся текущим временем : TimeText := 'Время - ' + GetHour(Time); TimeText := TimeText + ':'+ GetMinute(Time); TimeText := TimeText + ':' + GetSecond(Time); Здесь всё тоже самое, только работа идёт с минутами, часами и секундами. Думаю, ты разберёшься здесь и без моих слов. Перейдём сразу к определению текущего дня недели: Week[1]:='Воскресенье'; Week[2]:='Понедельник'; Week[3]:='Вторник'; Week[4]:='Среда'; Week[5]:='Четверг'; Week[6]:='Пятница'; Week[7]:='Суббота'; DayOfWeek:=GetWeekDay(Time); DayText:='День недели - ' + Week[DayOfWeek]; Здесь каждому значению массива присваиваем определённое значение, у нас это название дней недели. Потом, строкой DayOfWeek:=GetWeekDay(Time); , получаем и записываем в числовую переменную номер дня недели. Только функция это европейская, так что и начинается отсчёт дней по европейски с воскресенья, т.е. значение 1 будет означать "воскресенье", а не "понедельник". Ну а дальше записываем в текстовую пременную наш текущий день недели. И в конце пиши вот это: DrawText(DateText,5,0); DrawText(TimeText,5,15); DrawText(DayText,5,30); Repaint; Delay(10000); Ну здесь ты и сам всё знаешь : выводим наш текст, перерисовываемся и делаем задержку. Вот и наш сегодняшний пример готов. Исходники забирай здесь. Только я ещё должен хоть немного сказать про таймер, ведь он так нужен для игр. Вот эта функция - function GetRelativeTimeMs: integer; Возвращает она текущее время в течение миллисекунд. Каждые 48 дней, эта величина восстанавливается и начинает считаются с 0. Не используй эту функцию, чтобы определять текущую дату, а используй для осуществления таймеров в приложении. Давай рассмотрим эту функцию на примере игры Tetris. Каждую секунду игра должна перемещать блок вниз или, если пользователь нажал кнопочки, вправо и влево. Вот примерный алгоритм: ... SavedTime := GetRelativeTimeMs; //инициализация таймера repeat { отслежка клавиатуры } key := GetKeyClicked; if KeyToAction(key) = GA_LEFT then moveLeft;//если нажали влево, то двигаем влево if KeyToAction(key) = GA_RIGHT then moveRight;//если нажали вправо, то двигаем вправо { проверяем, не прошла ли секунда } if ((GetRelativeTimeMs - SavedTime) > 1000) or (GetRelativeTimeMs < SavedTime) { учитываем, что таймер сбросится через 48 дней } then begin SavedTime := GetRelativeTimeMs; moveDown; //если ничего не нажали, то двигаемся вниз end; until gameOver;//конец игре :) ... Это очень простой алгоритм, показывающий основы использования таймера. Объяснять я его не буду, из коментариев и так всё понятно. Надеюсь материал тебе понравился. Остальное позже...