Файл: Timer.txt

Дата: 02.01.2016

* Таймер.
* Программа КОНЦЕПТ, 02.01.2016, www.gendoc.ru
* Параметры времени (начало, конец, шаг) задаются в секундах.

ТАЙМЕР_ПОДГОТОВКА
ТАЙМЕР_НАЧАЛО
ТАЙМЕР_РИСОВАТЬ
Кнопка_выхода

****** Функции обработки событий ******

функция _$ВЫБОР
  если [_$ВЫБОР;ОБЪЕКТ] == выход
    ТАЙМЕР_КОНЕЦ
    показать сообщение 'Программа завершена.'  
    СТОП
  конец
возврат

функция _$ТАЙМЕР
  если [ТАЙМЕР;состояние_таймера] == запущен
    ТАЙМЕР_ШАГ
    вызвать [ТАЙМЕР;событие_действие]
  конец
возврат

****** Вспомогательные функции ******

* Кнопка остановки таймера и последующего завершения работы программы
функция Кнопка_выхода
  присвоить выход_х1 10 выход_у1 100 выход_х2 190 выход_у2 150
  $ЦветТекста = [$черный]
  $ЦветКисти = [$голубой]
  $ЦветЛинии = [$ЦветКисти]
  $РазмерТекста = 12
  рисовать прямоугольник [выход_х1] [выход_у1] [выход_х2] [выход_у2]
  рисовать текстВПрямоугольнике [выход_х1] [выход_у1] [выход_х2] [выход_у2] 'Остановить таймер'
  рисовать добавитьСенсор [выход_х1] [выход_у1] [выход_х2] [выход_у2] выход
возврат

****** Функции работы с таймером ******

функция ТАЙМЕР_ПОДГОТОВКА
  сущность ТАЙМЕР
    слева 10  
    сверху 10  
    ширина 180  
    высота 50
    цвет_фона [$желтый]  
    цвет_цифр [$синий]
    размер_цифр 24
    время_начало 0  
    время_конец 10
    время_шаг 0.1
    режим_таймера (список взять прямой_отсчет;обратный_отсчет;текущее_время 2 )
    состояние_таймера (список взять остановлен;запущен  1 )
    текущее_значение 0
    событие_останов ТАЙМЕР_СОБЫТИЕ_ОСТАНОВ
    событие_действие ТАЙМЕР_РИСОВАТЬ  
  создать
возврат

функция ТАЙМЕР_НАЧАЛО
  выбрать [ТАЙМЕР;режим_таймера]
  вариант прямой_отсчет
    ТАЙМЕР;текущее_значение = [ТАЙМЕР;время_начало]
  вариант обратный_отсчет
    ТАЙМЕР;текущее_значение = [ТАЙМЕР;время_конец]
  вариант текущее_время
  конецВыбора
  ТАЙМЕР;состояние_таймера = запущен
  $СобытиеПоТаймеру = [ТАЙМЕР;время_шаг] * 1000
возврат

функция ТАЙМЕР_КОНЕЦ
  $СобытиеПоТаймеру = 0
  ТАЙМЕР;состояние_таймера = остановлен
  вызвать [ТАЙМЕР;событие_останов]
возврат

функция ТАЙМЕР_РИСОВАТЬ
  память локальный х1 у1 х2 у2 стр
  $ТипЛинии = 1
  $ТипКисти = 1
  $ЦветТекста = [ТАЙМЕР;цвет_цифр]
  $ЦветКисти = [ТАЙМЕР;цвет_фона]
  $ЦветЛинии = [$ЦветКисти]
  $РазмерТекста = [ТАЙМЕР;размер_цифр]
  х1 = [ТАЙМЕР;слева]
  у1 = [ТАЙМЕР;сверху]
  х2 = [х1] + [ТАЙМЕР;ширина] - 1
  у2 = [у1] + [ТАЙМЕР;высота] - 1

  выбрать [ТАЙМЕР;режим_таймера]
  вариант прямой_отсчет;обратный_отсчет
    стр = (ВРЕМЯ_ИЗ_СЕКУНД [ТАЙМЕР;текущее_значение] )
  вариант текущее_время
    стр = [$время]
  конецВыбора

  рисовать прямоугольник [х1] [у1] [х2] [у2]
  рисовать текстВПрямоугольнике [х1] [у1] [х2] [у2] [стр]
возврат

функция ТАЙМЕР_ШАГ
  выбрать [ТАЙМЕР;режим_таймера]
  вариант прямой_отсчет
    если [ТАЙМЕР;текущее_значение] < [ТАЙМЕР;время_конец]
      вычислить + ТАЙМЕР;текущее_значение $ [ТАЙМЕР;время_шаг]
    иначе
      ТАЙМЕР_КОНЕЦ
    конец
  вариант обратный_отсчет
    если [ТАЙМЕР;текущее_значение] > [ТАЙМЕР;время_начало]
      вычислить - ТАЙМЕР;текущее_значение $ [ТАЙМЕР;время_шаг]
    иначе
      ТАЙМЕР_КОНЕЦ
    конец
  вариант текущее_время
  конецВыбора
возврат

функция ТАЙМЕР_СОБЫТИЕ_ОСТАНОВ
  показать сообщение 'Таймер остановлен!'
возврат

функция ВРЕМЯ_ИЗ_СЕКУНД секунды
  память локальный стр мин сек
  вычислить делитьЦелое мин [секунды] 60
  вычислить остаток сек [секунды] 60
  если [мин] < 10
    мин = "0[мин]"
  конец
  если [сек] < 10
    сек = "0[сек]"
  конец
  стр = "[мин]:[сек]"
возврат [стр]