|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**) ОТДЕЛ ПолеСВопросом;
(*============================================================================*
* НАЗНАЧЕНИЕ: вывод вопроса
*============================================================================*)
ИСПОЛЬЗУЕТ
Надел,
Поле,
Подложка,
Записка,
Черта,
Кнопка,
Ввод ИЗ "..\Обмен\";
ПОСТ
(* действия кнопок и состояние поля *)
сДа- = 1;
сНет- = 2;
(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
ДЛЯ посылка ВИДА
| Ввод.ОтКлавиш:
ЕСЛИ посылка.код = 1BH ТО (* Esc *)
поле.состояние:=Поле.сОтмена;
посылка.код:=0
КОН
| Кнопка.Посылка:
поле.состояние:=посылка.кнопка.действие
ИНАЧЕ
КОН
КОН Приём;
(******************************************************************************)
ЗАДАЧА Выполнить-(
(* Цель: осуществить вывод вопроса *)
(******************************************************************************)
(* До: *)
заголовок-:ЦЕПЬ; (* заголовок подложки *)
строк:ЦЕЛ; (* желаемая высота текста *)
колонок:ЦЕЛ; (* желаемая ширина текста *)
окружение:Поле.Доступ;(* окружающее поле *)
номерСправки:ЦЕЛ; (* номер справки или 0 *)
текст-:ЦЕПЬ (* текст вопроса *)
(* Ответ: *)
):ЦЕЛ; (* состояние поля после отработки *)
(******************************************************************************)
ПОСТ
(* цепочки для кнопок *)
цДа ="[ ~Да ]";
цНет ="[ ~Нет ]";
цОтмена ="[ Отмена ]";
длДа =ДЛИНА(цДа)-1;
длНет =ДЛИНА(цНет)-1;
длОтмена=ДЛИНА(цОтмена);
промежуток=2; (* промежуток между кнопками *)
занято =длДа + промежуток + длНет + промежуток + длОтмена;
ПЕР
поле:Поле.Доступ;
подложка:Подложка.Доступ;
черта:Черта.Доступ;
записка:Записка.Доступ;
кнДа,кнНет,кнОтмена:Кнопка.Доступ;
позДа,позНет,позОтмена:ЦЕЛ;
УКАЗ
(* вычисление местоположения кнопок *)
ЕСЛИ занято > колонок ТО
колонок:=занято
КОН;
позДа:=2+((колонок-занято+1) ДЕЛИТЬ 2);
позНет:=позДа+длДа+промежуток;
позОтмена:=позНет+длНет+промежуток;
(* создаём поле *)
поле:=Поле.Создать(0,0,строк+4,колонок+4,окружение,ВКЛ,Приём);
(* создаём наделы *)
подложка:=Подложка.Создать(0,0,0,0,заголовок);
записка:=Записка.Создать(1,2,-3,-2,текст);
черта:=Черта.Создать(-3,0,1,0);
кнДа:=Кнопка.Создать(-2,позДа,цДа,сДа,ВКЛ);
кнНет:=Кнопка.Создать(-2,позНет,цНет,сНет,ВКЛ);
кнОтмена:=Кнопка.Создать(-2,позОтмена,цОтмена,Поле.сОтмена,ВКЛ);
(* заполняем наделы *)
подложка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения;
подложка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения;
записка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения;
записка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения;
(* добавляем наделы вс порядке отрисовки и получения ввода *)
Поле.ДобавитьНадел(поле,подложка);
Поле.ДобавитьНадел(поле,записка);
Поле.ДобавитьНадел(поле,черта);
Поле.ДобавитьНадел(поле,кнДа);
Поле.ДобавитьНадел(поле,кнНет);
Поле.ДобавитьНадел(поле,кнОтмена);
(* основная работа *)
Поле.Рисовать(поле);
ПОВТОРЯТЬ
Поле.Проверить(поле)
ДО поле.состояние # Поле.сРабота;
(* восстанавливаем окружение *)
Поле.Рисовать(окружение);
ВОЗВРАТ поле.состояние
КОН Выполнить;
КОН ПолеСВопросом.
|
|