16. Редактор в роли меню
Редактор B:EDFILE1(<имя файла="">) имеет несколько модификаций, который устанавливаются управляющими параметрами. Как уже говорилось, параметр PAR(39,2) - разрешает редактирование файла. Рассмотрим другие параметры:имя>
B:PAR(36,<номер строки="">)номер>
B:PAR(37,<номер позиции="" в="" строке="">)номер>
Устанавливают месторасположение риски (место редактирования).
Например, при B:PAR(36,5) B:PAR(37,1) риска будет на первой позиции в пятой строке.
Эти же параметры указывают текущие координаты X1,X2 риски (которую можно перемещать):
IF ... B:GETPAR(36,X1) B:GETPAR(37,X2) ... THEN ...;
Параметр B:PAR(18,1) B:EDFILE1(<имя файла="">) делает из редактора меню. Строки редактора становятся пунктами меню. Заглавие меню выдается в окне, которое располагается перед меню. В отличие от B:MENU(...), такое меню может иметь большое количество пунктов (сотни тысяч) и используется в качестве каталогов - перечней различных объектов БЗ. При этом будем различать два варианта:имя>
- Когда строки каталога (редактора-меню) перенумерованы, каждая начинаются с номера - целого числа. Этот вариант близок к обычному меню. Для вычисления объекта по выбранной строке требуется формирование специальных меток, см. п.13.
- Когда строки каталога не перенумерованы и каждая строка содержит информацию о каком-либо объекте БЗ. Объект может быть вычислен за счет анализа текста выбранной строки. Здесь никаких меток не требуется.
Реакция редактора-меню на нажатие клавиш:
1) Выбрана N-я строка редактора-меню, которая начинается не с числа, и нажата ENTER. В БЗ будет введен фрагмент @@(<текст n-ой="" строки="">) и установлен параметр PAR(11,N).текст>
2) Выбрана N-я строка редактора-меню, которая начинается с числа, и нажата ENTER. В БЗ будет введен фрагмент @@(<число>) и установлен параметр PAR(11,N). Параметр PAR(11,N) указывает на выбранный пункт – N-ый.
3) Нажата служебная клавиша ESC (или F1, ..., F10). В БЗ будет введен фрагмент @@(ESC) и установлен параметр PAR(6,27).
Пример 16.1. Выдать всех студентов группы ПМ96 в виде меню. Используется программа примера 13.1 с небольшими изменениями. Текст меню (картинка) строятся в файле - STUD.NEW, который выдается в редактор. Заглавие формируется с помощью окна B:GETWINDOW(1,3,78,21,"Студенты: "). Для выделения строки используется параметр B:PAR(36,<номер строки>). В связи с этим продукция MENU_ST(X10) будет иметь вид:
MENU_ST(X10):IF B:GETPAR(61,X7)
B:#(X7,0) {= Вызов T: до тех пор пока не станет PAR(61,0) =}
THEN
T1:PR_LINE(1,1,"Поиск студентов") { информация в верхней строке }
T1:PR_LINE(1,25,"Выход - по ESC") { информация в нижней строке }
B:GETWINDOW(1,3,78,21,"Студенты: ") {= Заглавие =}
B:NEW(X8) {= место в БЗ, откуда будет стирание =}
B:DELFR(MT_ST) {= метки будут строиться заново =}
B:PAR(50,0) {= счётчик пунктов =}
B:REW('STUD.NEW') {= запись в файл STUD.NEW =}
T!:LIST_ST(X10) {= Пункты меню - ФИО студентов =}
B:REW() {= конец построения меню =}
B:PAR(18,1) {= делает из редактора меню =}
B:PAR(36,X7) {= выделяет строку X7 =}
B:EDFILE1('STUD.NEW') {= выдача редактора-меню =}
B:PAR(18,0)
T1:AN_ST(X10) {= анализ выбранного пункта с выдачей ФИО студента =}
B:C(X8); {= стирание - удаление фрагментов БЗ от X8 =}
А в остальном, как в примере 13.1. Каждая строка начинается с ее номера - числа. Поэтому при выборе строки в БЗ вводится фрагмент @@(<число>). Для анализа выбранной строки используются те же продукции.число>
Предыдущий раздел|Следующий раздел