ГИ ЭКВМ, создание иерархического меню |
Главная / ЭКВМ / Программы / Примеры |
Ранее были рассмотрены примеры одноуровневых меню. Но гораздо чаще в программах встречаются меню многоуровневые - иерархические. Графический интерфейс (ГИ) пользователя ЭКВМ предназначен для поддержки меню с сложной структурой, включая иерархические. Для перемещения по пунктам и уровням меню поддержка со стороны программы ЭКВМ практически не требуется - эти функции выполняются автоматически при разборе записанных в память программ структур ГИ. Программа этого примера состоит из тринадцати связанных форм, образующих меню следующей структуры: Каждое меню, в свою очередь, включает несколько пунктов. В этой программе их количество изменяется от одного до двенадцати. Но никаких действий при их выборе программа не выполняет. Поскольку это лишь пример навигации по системе многоуровневого меню, а обработка такого количества действий затруднила бы его восприятие. Переходы между меню и пунктами, которые выполняются при нажатии кнопок ВВОД, ВЫХОД и ВЫБОР описываются таблицами в структуре каждой формы. Для наглядности, номера форм в программе совпадают с номерами меню. Главное меню определяется содержимым формы с нулевым номером (в общем случае это не обязательно, равно как и последовательная их нумерация). Далее приведены виды экранных форм программы примера.
Текст программы примера приведён ниже и снабжён достаточно подробными комментариями. Поскольку программа не выполняет никаких действий, кроме поддержки ГИ, основную её часть занимают структуры интерфейса. Можно заметить, что программа ЭКВМ, инициализирующая и поддерживающая приведённую выше структуру меню, занимает 33 байта. Пример программыФайл программы primgui10.mkp на ЯМК - 1921 байт, КС 167357/177 Текст программы primgui10.mkl для кросс-компилятора .CHARSET 1251 ; Файл primgui10 ; Пример работы с графическим интерфейсом пользователя ; Пример иерархического меню ; Регистры памяти не используются ; ====================================================== Начало программы .ORG 0 A0: CX ; Обнулить RX и сбросить признак ввода числа PP M 9202 ; текущая форма - 0 PP M 9203 ; активный элемент - 0 2 PP M 9010 ; Инициализировать графический экран PP M 9200 ; ненулевое значение - разрешение графического интерфейса .NUML TFORM PP M 9201 ; главная таблица форм TFORM A1: 64 ; Код принудительной перерисовки формы A2: PP M 9208 ; Перерисовать форму ; -------------- PP RM 9209 ; Считать результат выполнения операции F X!=0 A3 ; Перейти к опросу клавиатуры при равенстве нулю ; Обработка ошибки интерфейса ; Примечание. Значения 1 и 7 не являются ошибкой, ; но в этом примере ничего нет, кроме переходов между формами, ; поэтому результат всегда должен быть равен нулю .NUML STR1 PP M 9029 ; Вывести строку "Ошибка" R/S ; Останов ;--------------- A3: ; Опрос клавиатуры PP RM 9029 ; Считать код клавиши K NOT ; инверсия (0FFh -> 0) F X!=0 A3 ; если нет нажатия - продолжать опрос K NOT ; повторная инверсия восстанавливает значение в RX GOTO A2 ; Передать код нажатой клавиши в форму ;====================================================== Конец программы STR1: .TEXT "\nОшибка\0" ;====================================================== Структуры ГИ ; Вся программа для ЭКВМ, которая работает с этими структурами, ; размещена выше и занимает 44 байта. ; ; Хотя можно было уложиться и в 33, ; если исключить сообщение об ошибке, ; которое всё равно не выводится в этой программе. ; Для этого достаточно удалить выделеную выше минусами часть кода ; вместе со строкой STR1. ;===== Главная таблица форм TFORM: .DB 0 ; номер формы .DA F0 ; адрес начала формы 0 ; далее аналогично .DB 1 .DA F1 .DB 2 .DA F2 .DB 3 .DA F3 .DB 4 .DA F4 .DB 5 .DA F5 .DB 6 .DA F6 .DB 7 .DA F7 .DB 8 .DA F8 .DB 9 .DA F9 .DB 10 .DA F10 .DB 11 .DA F11 .DB 12 .DA F12 .END ; конец таблицы ;===== Форма 0 - Главное меню F0: ; Заголовок формы .FORM 2, F0DE, F0PI, F0PO, F0PL, F0PR, F0RI, F0KM ; таблица смещений ; максимальный номер элемента 2 (хотя всего их 3, считая нулевой) ; Примечание: расположение остальных полей структуры в пределах формы ; может быть произвольным F0DE: ;таблица флагов действий .DB 5,5,5 ; В двоичном виде 5 это 00 00 01 01 - установлены флаги "выбор" + "ввод" ; См. описание в документации. ; Выход из этой формы не требуется F0PI: F0PO: ; Таблицы перехода по выходу и входу здесь объединены ; поскольку команда ВЫХОД не обрабатывается .DB 1,0,2,0,3,0 ; первый байт пары значений - номер формы, второй - элемента F0PL: ; Таблица переходов по команде "Выбор влево" (и вверх) .DB 2,0,1 ; это номера элементов внутри формы - куда перейти с текущего ; например, с 0 на 2, с 1 на 0 и т.д. F0PR: ; Таблица переходов по команде "Выбор вправо" (и вниз) .DB 1,2,0 ; это номера элементов внутри формы - куда перейти с текущего ; например, с 0 на 1, с 1 на 2 и т.д. F0RI: ; основная программа экранной формы .TYPE 0 ; шрифт 0 .TAB 32, 0 ; позиция (X=32,Y=0), координата Y - сверху-вниз .TXTP 16, F0TZ ; TXTP - вывести строку из области памяти программ ; атрибут 16 - перерисовка, расстояние между символами 1 ; F0TZ - адрес строки с наименованием формы .TAB 0, 9 ; позиция (0,9) .SQU 0, 127, 1 ; прямоугольник (127,1) - это линия .TAB 2, 20 ; позиция (2,20) .TXTP 16, F0T0 ; TXTP - вывести строку из области памяти программ ; атрибут 16 - перерисовка, расстояние между символами 1 ; F0T0 - адрес строки с описанием первого пункта (т.е. нулевого элемента) ; далее аналогично .TAB 2, 30 .TXTP 16, F0T1 .TAB 2, 40 .TXTP 16, F0T2 .END ; конец основной программы F0KM: ; Таблица смещений программ элементов команды ; Эти программы выполняются после основной программы формы ; и указывают на точку входа для активного элемента .DBB F0KM0, F0KM1, F0KM2 F0KM0: .TAB 0, 20 ; установить позицию (0,20) для элемента 0 .JM F0KME ; перейти к F0KME - общей части программ ; далее аналогично F0KM1: .TAB 0, 30 .JM F0KME F0KM2: .TAB 0, 40 ; из последнего элемента переходить не требуется ; далее общая часть программ F0KME: .SQU 3, 127, 9 ; в указанной ранее позиции нарисовать ; прямоугольник размером 127 на 9 ; с атрибутами 3 - XOR ; в итоге - инверсия текста сообщения .END ; конец программ элементов ;======= Тексты строк к структуре формы не относятся ; и могут располагаться в произвольном месте памяти F0TZ: .TEXT "Главное меню\0" F0T0: .TEXT "Выбрать меню 1\0" F0T1: .TEXT "Выбрать меню 2\0" F0T2: .TEXT "Выбрать меню 3\0" ; ============== ; Следующие три формы (F1,F2,F3) содержат меню второго уровня ; и устроены одинаковым образом, отличаясь только ; номерами форм и элементов в таблицах и наименованиями пунктов ;===== Форма 1 - Меню 1 F1: ; Заголовок формы .FORM 2, F1DE, F1PI, F1PO, F1PL, F1PR, F1RI, F1KM ; таблица смещений ; максимальный номер элемента 2 F1DE: ;таблица флагов действий .DB 21,21,21 ; В двоичном виде 21 это 00 01 01 01 - установлены флаги "выбор" + "ввод" + "выход" ; См. описание в документации. F1PI: ; Таблица переходов по команде ВВОД .DB 4,0,5,0,6,0 ; переходы к F(4,0),F(5,0),F(6,0) F1PO: ; Таблица перехода по команде ВЫХОД .DB 0,0,0,0,0,0 ; для любого активного элемента ; указывают на форму верхнего уровня F(0,0) ; Здесь на форму 0 с активным элементом 0 ; Примечание. В общем случае это не обязательно - ; выход из различных элементов может быть и в разные формы F1PL: ; Таблица переходов по команде "Выбор влево" (и вверх) .DB 2,0,1 ; это номера элементов внутри формы - куда перейти с текущего ; например, с 0 на 2, с 1 на 0 и т.д. F1PR: ; Таблица переходов по команде "Выбор вправо" (и вниз) .DB 1,2,0 ; это номера элементов внутри формы - куда перейти с текущего ; например, с 0 на 1, с 1 на 2 и т.д. F1RI: ; основная программа экранной формы .TYPE 0 ; шрифт 0 .TAB 48, 0 ; позиция (X=34,Y=0), координата Y - сверху-вниз .TXTP 16, F1TZ ; TXTP - вывести строку из области памяти программ ; атрибут 16 - перерисовка, расстояние между символами 1 ; F1TZ - адрес строки с наименованием формы .TAB 0, 9 ; позиция (0,9) .SQU 0, 127, 1 ; прямоугольник (127,1) - это линия .TAB 2, 20 ; позиция (2,20) .TXTP 16, F1T0 ; TXTP - вывести строку из области памяти программ ; атрибут 16 - перерисовка, расстояние между символами 1 ; F1T0 - адрес строки с описанием первого пункта (т.е. нулевого элемента) ; далее аналогично .TAB 2, 30 .TXTP 16, F1T1 .TAB 2, 40 .TXTP 16, F1T2 .END ; конец основной программы F1KM: ; Таблица смещений программ элементов команды .DBB F1KM0, F1KM1, F1KM2 F1KM0: .TAB 0, 20 ; установить позицию (0,20) для элемента 0 .JM F1KME ; перейти к F0KME - общей части программ ; далее аналогично F1KM1: .TAB 0, 30 .JM F1KME F1KM2: .TAB 0, 40 ; из последнего элемента переходить не требуется ; далее общая часть программ F1KME: .SQU 3, 127, 9 ; в указанной ранее позиции нарисовать ; прямоугольник размером 127 на 9 ; с атрибутами 3 - XOR ; в итоге - инверсия текста сообщения .END ; конец программ элементов F1TZ: .TEXT "Меню 1\0" F1T0: .TEXT "Выбрать меню 4\0" F1T1: .TEXT "Выбрать меню 5\0" F1T2: .TEXT "Выбрать меню 6\0" ;===== Форма 2 - Меню 2 F2: .FORM 2, F2DE, F2PI, F2PO, F2PL, F2PR, F2RI, F2KM F2DE: .DB 21,21,21 ; 00 01 01 01 - установлены флаги "выбор" + "ввод" + "выход" F2PI: ; Таблица переходов по команде ВВОД .DB 7,0,8,0,9,0 ; переходы к F(7,0),F(8,0),F(9,0) F2PO: ; Таблица перехода по команде ВЫХОД .DB 0,1,0,1,0,1 ; переход к F(0,1) ; при возврате в F0 будет активен тот пункт, который ; позволяет перейти к этой форме F2PL: .DB 2,0,1 F2PR: .DB 1,2,0 ; Программа формы - без комментариев F2RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F2TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB, 2, 20 .TXTP 16, F2T0 .TAB 2, 30 .TXTP 16, F2T1 .TAB 2, 40 .TXTP 16, F2T2 .END F2KM: .DBB F2KM0, F2KM1, F2KM2 F2KM0: .TAB 0, 20 .JM F2KME F2KM1: .TAB 0, 30 .JM F2KME F2KM2: .TAB 0, 40 F2KME: .SQU 3, 127, 9 .END F2TZ: .TEXT "Меню 2\0" F2T0: .TEXT "Выбрать меню 7\0" F2T1: .TEXT "Выбрать меню 8\0" F2T2: .TEXT "Выбрать меню 9\0" ;===== Форма 3 - Меню 3 F3: .FORM 2, F3DE, F3PI, F3PO, F3PL, F3PR, F3RI, F3KM F3DE: .DB 21,21,21 ; 00 01 01 01 - установлены флаги "выбор" + "ввод" + "выход" F3PI: ; Таблица переходов по команде ВВОД .DB 10,0,11,0,12,0 ; переходы к F(10,0),F(11,0),F(12,0) F3PO: ; Таблица перехода по команде ВЫХОД .DB 0,2,0,2,0,2 ; переход к F(0,2) ; при возврате в F0 будет активен тот пункт, который ; позволяет перейти к этой форме F3PL: .DB 2,0,1 F3PR: .DB 1,2,0 F3RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F3TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F3T0 .TAB 2, 30 .TXTP 16, F3T1 .TAB 2, 40 .TXTP 16, F3T2 .END F3KM: .DBB F3KM0, F3KM1, F3KM2 F3KM0: .TAB 0, 20 .JM F3KME F3KM1: .TAB 0, 30 .JM F3KME F3KM2: .TAB 0, 40 F3KME: .SQU 3, 127, 9 .END F3TZ: .TEXT "Меню 3\0" F3T0: .TEXT "Выбрать меню 10\0" F3T1: .TEXT "Выбрать меню 11\0" F3T2: .TEXT "Выбрать меню 12\0" ; ============== ; Следующие девять форм (F4...F12) содержат меню нижнего уровня ; Они устроены одинаковым образом, отличаясь небольшими деталями ; Пункты носят декоративный характер ; поскольку команда ВВОД для них блокирована ;===== Форма 4 - Меню 4 F4: .FORM 0, F4DE, F4PI, F4PO, F4PL, F4PR, F4RI, F4KM ; содержит 1 элемент F4DE: .DB 17 ; 17 = 00 01 00 01 - установлены флаги "выбор" и "выход" F4PI: ; Таблицы переходов по команде ВВОД нет F4PO: ; Таблица перехода по команде ВЫХОД .DB 1,0 ; переход к F(1,0) F4PL: F4PR: .DB 0 ; один элемент - переход только на себя F4RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F4TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F4T0 .END F4KM: .DBB F4KM0 F4KM0: .TAB 0, 20 .SQU 3, 127, 9 .END F4TZ: .TEXT "Меню 4\0" F4T0: .TEXT "Пункт (4,0)\0" ;===== Форма 5 - Меню 5 F5: .FORM 1, F5DE, F5PI, F5PO, F5PL, F5PR, F5RI, F5KM ; содержит 2 элемента F5DE: .DB 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F5PI: ; Таблицы переходов по команде ВВОД нет F5PO: ; Таблица перехода по команде ВЫХОД .DB 1,1,1,1 ; переход к F(1,1) F5PL: F5PR: .DB 1,0 ; два элемента - таблицы выбора влево и вправо совпадают F5RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F5TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F5T0 .TAB 2, 30 .TXTP 16, F5T1 .END F5KM: .DBB F5KM0, F5KM1 F5KM0: .TAB 0, 20 .JM F5KME F5KM1: .TAB 0, 30 F5KME: .SQU 3, 127, 9 .END F5TZ: .TEXT "Меню 5\0" F5T0: .TEXT "Пункт (5,0)\0" F5T1: .TEXT "Пункт (5,1)\0" ;===== Форма 6 - Меню 6 F6: .FORM 2, F6DE, F6PI, F6PO, F6PL, F6PR, F6RI, F6KM ; содержит 3 элемента F6DE: .DB 17,17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F6PI: ; Таблицы переходов по команде ВВОД нет F6PO: ; Таблица перехода по команде ВЫХОД .DB 1,2,1,2,1,2 ; переход к F(1,2) F6PL: .DB 2,0,1 F6PR: .DB 1,2,0 F6RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F6TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F6T0 .TAB 2, 30 .TXTP 16, F6T1 .TAB 2, 40 .TXTP 16, F6T2 .END F6KM: .DBB F6KM0, F6KM1, F6KM2 F6KM0: .TAB 0, 20 .JM F6KME F6KM1: .TAB 0, 30 .JM F6KME F6KM2: .TAB 0, 40 F6KME: .SQU 3, 127, 9 .END F6TZ: .TEXT "Меню 6\0" F6T0: .TEXT "Пункт (6,0)\0" F6T1: .TEXT "Пункт (6,1)\0" F6T2: .TEXT "Пункт (6,2)\0" ;===== Форма 7 - Меню 7 F7: .FORM 1, F7DE, F7PI, F7PO, F7PL, F7PR, F7RI, F7KM ; содержит 2 элемента F7DE: .DB 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F7PI: ; Таблицы переходов по команде ВВОД нет F7PO: ; Таблица перехода по команде ВЫХОД .DB 2,0,2,0 ; переход к F(2,0) F7PL: F7PR: .DB 1,0 ; два элемента - таблицы совпадают F7RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F7TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F7T0 .TAB 2, 30 .TXTP 16, F7T1 .END F7KM: .DBB F7KM0, F7KM1 F7KM0: .TAB 0, 19 .JM F7KME F7KM1: .TAB 0, 29 F7KME: ; для указания активного пункта применён вывод рамки .FRAME 3, 64, 10 .END F7TZ: .TEXT "Меню 7\0" F7T0: .TEXT "Пункт (7,0)\0" F7T1: .TEXT "Пункт (7,1)\0" ;===== Форма 8 - Меню 8 F8: .FORM 1, F8DE, F8PI, F8PO, F8PL, F8PR, F8RI, F8KM ; содержит 2 элемента F8DE: .DB 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F8PI: ; Таблицы переходов по команде ВВОД нет F8PO: ; Таблица перехода по команде ВЫХОД .DB 2,1,2,1 ; переход к F(2,1) F8PL: F8PR: .DB 1,0 ; два элемента - таблицы совпадают F8RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F8TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 2, 20 .TXTP 16, F8T0 .TAB 2, 30 .TXTP 16, F8T1 .END F8KM: .DBB F8KM0, F8KM1 F8KM0: .TAB 60, 20 .JM F8KME F8KM1: .TAB 60, 30 F8KME: ; для указания активного пункта применен текст .TXTP 16, F8TA .END F8TZ: .TEXT "Меню 8\0" F8T0: .TEXT "Пункт (8,0)\0" F8T1: .TEXT "Пункт (8,1)\0" F8TA: .TEXT "- выбран\0" ;===== Форма 9 - Меню 9 F9: . .FORM 1, F9DE, F9PI, F9PO, F9PL, F9PR, F9RI, F9KM ; содержит 2 элемента F9DE: .DB 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F9PI: ; Таблицы переходов по команде ВВОД нет F9PO: ; Таблица перехода по команде ВЫХОД .DB 2,2,2,2 ; переход к F(2,2) F9PL: F9PR: .DB 1,0 ; два элемента - таблицы совпадают F9RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F9TZ .TAB 0, 9 .SQU 0, 127, 1 .TAB 10, 20 .TXTP 16, F9T0 .TAB 10, 30 .TXTP 16, F9T1 .END F9KM: .DBB F9KM0, F9KM1 F9KM0: .TAB 0, 21 .JM F9KME F9KM1: .TAB 0, 31 F9KME: ; для указания активного пункта применено изображение треугольника .DRAWP 0, UK1 .END F9TZ: .TEXT "Меню 9\0" F9T0: .TEXT "Пункт (9,0)\0" F9T1: .TEXT "Пункт (9,1)\0" UK1: .DB 4h,8h .DB 7Fh .DB 3Eh .DB 1Ch .DB 8h ;===== Форма 10 - Меню 10 F10: .FORM 1, F10DE, F10PI, F10PO, F10PL, F10PR, F10RI, F10KM ; содержит 2 элемента F10DE: .DB 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F10PI: ; Таблицы переходов по команде ВВОД нет F10PO: ; Таблица перехода по команде ВЫХОД .DB 3,0,3,0 ; переход к F(3,0) F10PL: F10PR: .DB 1,0 ; два элемента - таблицы совпадают F10RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F10TZ .TAB 0, 9 .SQU 0, 127, 1 ; главная программа содержит только заголовок ; текст пунктов зависит от состояния .END F10KM: .DBB F10KM0, F10KM1 F10KM0: .TAB 2, 20 .TXTP 16, F10T0A ; текст активного пункта 0 .TAB 2, 30 .TXTP, 16, F10T1 ; текст неактивного пункта 1 .END F10KM1: .TAB 2, 20 .TXTP 16, F10T0 ; текст неактивного пункта 0 .TAB 2, 30 .TXTP 16, F10T1A ; текст активного пункта 1 .END F10TZ: .TEXT "Меню 10\0" F10T0: .TEXT "Невыбран пункт (10,0)\0" F10T1: .TEXT "Невыбран пункт (10,1)\0" F10T0A: .TEXT "Выбран пункт (10,0)\0" F10T1A: .TEXT "Выбран пункт (10,1)\0" ;===== Форма 11 - Меню 11 F11: .FORM 11, F11DE, F11PI, F11PO, F11PL, F11PR, F11RI, F11KM ; содержит 12 элементов F11DE: .DB 17,17,17,17,17, 17,17,17,17,17, 17,17 ; 00 01 00 01 - установлены флаги "выбор" и "выход" F11PI: ; Таблицы переходов по команде ВВОД нет F11PO: ; Таблица перехода по команде ВЫХОД .DB 3,1,3,1,3,1,3,1,3,1, 3,1,3,1,3,1,3,1,3,1, 3,1,3,1 ; переход к F(3,1) F11PL: .DB 11,0,1,2,3,4,5,6,7,8,9,10 F11PR: .DB 1,2,3,4,5,6,7,8,9,10,11,0 F11RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F11TZ .TAB 0, 9 .SQU 0, 127, 1 ; нарисовать двенадцать квадратов, размещённых в произвольных местах экрана .TAB 39, 25 ; координаты первого квадрата .MCALL F11RI1; подпрограмма вывода .TAB 47, 38 .MCALL F11RI1 .TAB 94, 26 .MCALL F11RI1 .TAB 91, 43 .MCALL F11RI1 .TAB 33, 48 .MCALL F11RI1 .TAB 2, 20 .MCALL F11RI1 .TAB 16, 25 .MCALL F11RI1 .TAB 76, 36 .MCALL F11RI1 .TAB 105, 39 .MCALL F11RI1 .TAB 25, 37 .MCALL F11RI1 .TAB 106, 19 .MCALL F11RI1 .TAB 55, 12 .MCALL F11RI1 .END F11RI1: ; подпрограмма вывода квадрата .SQU 0, 8, 8 .RETUM F11KM: .DBB F11KM0, F11KM1, F11KM2, F11KM3, F11KM4 .DBB F11KM5, F11KM6, F11KM7, F11KM8, F11KM9 .DBB F11KM10, F11KM11 F11KM0: .TAB 37, 23 .JM F11KME F11KM1: .TAB 45, 36 .JM F11KME F11KM2: .TAB 92, 24 .JM F11KME F11KM3: .TAB 89, 41 .JM F11KME F11KM4: .TAB 31, 46 .JM F11KME F11KM5: .TAB 0, 18 .JM F11KME F11KM6: .TAB 14, 23 .JM F11KME F11KM7: .TAB 74, 34 .JM F11KME F11KM8: .TAB 103, 37 .JM F11KME F11KM9: .TAB 23, 35 .JM F11KME F11KM10: .TAB 104, 17 .JM F11KME F11KM11: .TAB 53, 10 F11KME: .FRAME 0, 12, 12 ; вывод рамки .END F11TZ: .TEXT "Меню 11\0" ;===== Форма 12 - Меню 12 F12: .FORM 4, F12DE, F12PI, F12PO, F12PL, F12PR, F12RI, F12KM ; содержит 5 элементов F12DE: .DB 17,17,17,17,17 ; 17 = 00 01 00 01 - установлены флаги "выбор" и "выход" F12PI: ; Таблицы переходов по команде ВВОД нет F12PO: ; Таблица перехода по команде ВЫХОД .DB 3,2,3,2,3,2,3,2,3,2 ; переход к F(3,2) F12PL: .DB 4,0,1,2,3 F12PR: .DB 1,2,3,4,0 F12RI: .TYPE 0 .TAB 48, 0 .TXTP 16, F12TZ ; Вывод заголовка .TAB 0, 9 .SQU 0, 127, 1 .TAB 8, 12 .TXTP 16, F12TZ1 ; Вывод подсказки .END F12KM: .DBB F12KM0, F12KM1, F12KM2, F12KM3, F12KM4 F12KM0: .TAB 0, 32 .TXTP 16, F12T0 ; текст пункта 0 .END F12KM1: .TAB 0, 32 .TXTP 16, F12T1 ; текст пункта 1 .END F12KM2: .TAB 0, 32 .TXTP 16, F12T2 ; текст пункта 2 .END F12KM3: .TAB 0, 32 .TXTP 16, F12T3 ; текст пункта 3 - первая строка .TAB 0, 40 .TXTP 16, F12T31 ; текст пункта 3 - вторая строка .TAB 0, 48 .TXTP 16, F12T32 ; текст пункта 3 - третья строка .TAB 0, 56 .TXTP 16, F12T33 ; текст пункта 3 - четвёртая строка .END F12KM4: .TAB 0, 32 .TXTP 16, F12T4 ; текст пункта 4 - первая строка .TAB 0, 40 .TXTP 16, F12T41 ; текст пункта 4 - вторая строка .END F12TZ: .TEXT "Меню 12\0" F12TZ1: .TEXT "Нажимте клавишу ВЫБОР\0" F12T0: .TEXT "Выбран пункт (12,0)\0" F12T1: .TEXT "Следующий пункт (12,1)\0" F12T2: .TEXT "Далее (12,2)\0" F12T3: .TEXT "Здесь может быть\0" F12T31: .TEXT "Ваш текст\0" F12T32: .TEXT "При этом выбран\0" F12T33: .TEXT "пункт (12,3)\0" F12T4: .TEXT "Последний пункт меню\0" F12T41: .TEXT "(12,4)\0" .ENDP В примере приведены основные приёмы программирования многоуровневого меню и экранных форм с текстом и графикой. Но возможности ГИ этим далеко не исчерпываются |
||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |