|
(******************************************************************************)
(**) ОТДЕЛ Секундомер+;
(******************************************************************************
* НАЗНАЧЕНИЕ: пример использования наделов и времени
******************************************************************************)
ИСПОЛЬЗУЕТ
ОС ИЗ "...\Отделы\Обмен\", (* для считывания времени *)
Окно ИЗ "...\Отделы\Обмен\",
Ввод ИЗ "...\Отделы\Обмен\",
Поле ИЗ "...\Отделы\Поле\",
Подложка ИЗ "...\Отделы\Поле\",
Записка ИЗ "...\Отделы\Поле\",
Кнопка ИЗ "...\Отделы\Поле\",
Черта ИЗ "...\Отделы\Поле\";
ПОСТ (* действия кнопок *)
дПуск =1;
дСтоп =2;
дСброс=3;
дВыход=4;
ПЕР
идётИзмерение:КЛЮЧ; (* ВКЛ, если идёт измерение времени *)
измеренноеВремя:ЦЕЛ; (* промежуток времени в мс *)
моментОбновления:ЦЕЛ; (* показаний *)
зВремя:Записка.Доступ; (* записка с показаниями секундомера *)
(******************************************************************************)
ЗАДАЧА ОбновитьПоказания(номерЧасов:ЦЕЛ);
(* обновить показания секундомера *)
ПЕР
сотые,секунды,минуты,часы:ЦЕЛ;
сейчас:ЦЕЛ;
прошлоВремени:ЦЕЛ;
УКАЗ
сейчас:=ОС.Время();
прошлоВремени:=сейчас-моментОбновления;
моментОбновления:=сейчас;
ЕСЛИ идётИзмерение ТО
УВЕЛИЧИТЬ(измеренноеВремя,прошлоВремени)
КОН;
сотые:=измеренноеВремя ДЕЛИТЬ 10;
секунды:=сотые ДЕЛИТЬ 100;
минуты:=секунды ДЕЛИТЬ 60;
часы:=минуты ДЕЛИТЬ 60;
Записка.ИзЧЦел(
зВремя,"%.2d:%.2d:%.2d.%.2d",
часы,минуты ОСТАТОК 60,
секунды ОСТАТОК 60,
сотые ОСТАТОК 100
)
КОН ОбновитьПоказания;
(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
ДЛЯ посылка ВИДА
| Кнопка.Посылка:
ВЫБРАТЬ посылка.кнопка.действие ИЗ
| дПуск: идётИзмерение:=ВКЛ
| дСтоп: идётИзмерение:=ОТКЛ
| дСброс: измеренноеВремя:=0
| дВыход: поле.состояние:=Поле.сДалее
КОН
| Ввод.ОтКлавиш:
ЕСЛИ посылка.упрАльт И (посылка.код=58H) (* Alt+'X' *)
ИЛИ
(посылка.код=1BH) (* Esc *)
ТО
поле.состояние:=Поле.сДалее
КОН
ИНАЧЕ
КОН
КОН Приём;
(******************************************************************************)
ЗАДАЧА Главная;
ПЕР
поле:Поле.Доступ; (* рабочее поле экрана *)
подложка:Подложка.Доступ; (* подложка поля *)
кнСтоп,кнПуск,кнСброс,кнВыход:Кнопка.Доступ; (* управляющие кнопки *)
черта1,черта2:Черта.Доступ; (* разделительные черты *)
часы:ЦЕЛ;
(****************************************************************************)
ЗАДАЧА СоздатьПоле; (* создаёт рабочее поле экрана с кнопками-наделами *)
УКАЗ (* создаём поле экрана *)
(* задача Приём *)
поле:=Поле.Создать(0,0,8,17,ПУСТО,ОТКЛ,Приём);
(* создаём наделы *)
подложка:=Подложка.Создать(0,0,0,0,"");
зВремя:=Записка.Создать(1,3,1,11,"00:00:00.00");
черта1:=Черта.Создать(2,0,1,0);
кнПуск:=Кнопка.Создать(3,2,"[~Пуск]",дПуск,ВКЛ);
кнСтоп:=Кнопка.Создать(3,9,"[~Стоп]",дСтоп,ВКЛ);
кнСброс:=Кнопка.Создать(4,4,"[ С~брос ]",дСброс,ВКЛ);
черта2:=Черта.Создать(5,0,1,0);
кнВыход:=Кнопка.Создать(6,4,"[ ~Выход ]",дВыход,ВКЛ);
(* добавляем наделы в порядке получения ввода *)
Поле.ДобавитьНадел(поле,подложка);
Поле.ДобавитьНадел(поле,зВремя);
Поле.ДобавитьНадел(поле,черта1);
Поле.ДобавитьНадел(поле,кнПуск);
Поле.ДобавитьНадел(поле,кнСтоп);
Поле.ДобавитьНадел(поле,кнСброс);
Поле.ДобавитьНадел(поле,черта2);
Поле.ДобавитьНадел(поле,кнВыход)
КОН СоздатьПоле;
УКАЗ (* задача ОбновитьПоказания *)
Окно.Графическое("Секундомер","Lucida Console",30,ОбновитьПоказания);
(*
Окно.Текстовое(ОбновитьПоказания);
*)
СоздатьПоле;
Поле.ОкноНаВсёПоле(поле);
Поле.Рисовать(поле);
часы:=Окно.СоздатьЧасы(1,100); (* обновляем показания через 100мс *)
Окно.Показать;
(* проверяем и обрабатываем ввод от человека *)
ПОКА поле.состояние=Поле.сРабота ВЫП
Поле.Проверить(поле)
КОН;
Окно.УдалитьЧасы(часы)
КОН Главная;
(******************************************************************************)
УКАЗ
измеренноеВремя:=0;
идётИзмерение:=ОТКЛ;
Главная
КОН Секундомер.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|