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. Каждая строка начинается с ее номера - числа. Поэтому при выборе строки в БЗ вводится фрагмент @@(<число>). Для анализа выбранной строки используются те же продукции.

Предыдущий раздел|Следующий раздел

- Главная страница -