Программа
White = 15 'Белый цвет
LightGray = 7 'Серый цвет
'Описание параметров меню:
QuantityMenuPoint = 4 ' Количество пунктов меню
ExitPoint = QuantityMenuPoint ' Пункт меню "Выход"
MenuPoint = ExitPoint ' Текущий пункт меню
MaxLengthMenuPoint = 17' Максимальная длина пункта меню
' Положение верхнего левого угла меню:
XStart = (80 - MaxLengthMenuPoint) \ 2 - 2
YStart = (24 - QuantityMenuPoint) \ 2 - 1
DIM MenuList$(QuantityMenuPoint) ' Массив для списка пунктов меню
' Список пунктов меню:
DATA "Первый пункт меню","Второй пункт меню","Третий пункт меню","ВЫХОД "
FOR i% = 1 TO QuantityMenuPoint ' Цикл инициализации массива
READ MenuList$(i%) ' Инициализация массива
NEXT i%
DEF FnMenu% ' Функция вывода меню
CLS ' Очистка экрана
' Вывод статус-строки:
LOCATE 24, 8 ' Позиционирование курсора
COLOR White ' Установка белого цвета
PRINT CHR$(24); CHR$(25);
COLOR LightGray ' Установка серого цвета
PRINT " Выбор пункта меню";
LOCATE 24, 38 ' Позиционирование курсора
COLOR White ' Установка белого цвета
PRINT CHR$(17); CHR$(196); CHR$(217);
COLOR LightGray ' Установка серого цвета
PRINT " Активизация выбранного пункта";
ExitMenuFlag$ = "No" ' Сброс флага "Выход"
' Прорисовка меню:
LOCATE YStart, XStart ' Позиционирование курсора
PRINT "╔"; ' Вывод левого верхнего угла рамки меню
FOR MenuMeter = 1 TO MaxLengthMenuPoint + 2
' Цикл вывода верхней части рамки меню
PRINT "═";
NEXT MenuMeter
PRINT "╗"; ' Вывод правого верхнего угла рамки меню
FOR MenuMeter = 1 TO QuantityMenuPoint ' Цикл вывода пунктов меню
LOCATE YStart + MenuMeter, XStart ' Позиционирование курсора
PRINT "║ "; MenuList$(MenuMeter); " ║"; ' Вывод пункта меню
NEXT MenuMeter
LOCATE YStart + QuantityMenuPoint + 1, XStart
PRINT "╚"; ' Вывод левого нижнего угла рамки меню
FOR MenuMeter = 1 TO MaxLengthMenuPoint + 2
' Цикл вывода нижней части рамки меню
PRINT "═";
NEXT MenuMeter
PRINT "╝"; ' Вывод правого нижнего угла рамки меню
GOSUB PointON: ' Подсветить пункт меню
DO
SELECT CASE INKEY$ ' Выбор действия по нажатой клавише
CASE CHR$(0) + CHR$(72) ' Движение вверх
GOSUB PointOFF: ' Погасить пункт меню
' Переопределение пункта меню:
MenuPoint = MenuPoint - 1
IF MenuPoint < 1 THEN MenuPoint = QuantityMenuPoint
' Переопределение пункта меню при выходе за предел диапазона
GOSUB PointON: ' Подсветить пункт меню
CASE CHR$(0) + CHR$(80) ' Движение вниз
GOSUB PointOFF: ' Погасить пункт меню
' Переопределение пункта меню:
MenuPoint = MenuPoint + 1
IF MenuPoint > QuantityMenuPoint THEN MenuPoint = 1
' Переопределение пункта меню при выходе за предел диапазона
GOSUB PointON: ' Подсветить пункт меню
CASE CHR$(13) ' Выход по "Enter"
ExitMenuFlag$ = "Yes" ' Подъем флага "Выход"
CASE CHR$(27) ' Выход по "Esc"
ExitMenuFlag$ = "Yes" ' Подъем флага "Выход"
MenuPoint = ExitPoint
END SELECT
LOOP UNTIL ExitMenuFlag$ = "Yes"
IF MenuPoint = ExitPoint THEN FnMenu% = 255 ELSE FnMenu% = MenuPoint
' Определение значения функции
GOTO EndMenu
PointON: ' Подпрограмма подсветки пункта меню
COLOR White ' Установка белого цвета
LOCATE YStart + MenuPoint, XStart + 1 ' Позиционирование курсора
PRINT CHR$(16); MenuList$(MenuPoint); CHR$(17) ' Вывод пункта меню с указателями
COLOR LightGray ' Установка серого цвета
RETURN
PointOFF: ' Подпрограмма гашения пункта меню
COLOR LightGray ' Установка серого цвета
LOCATE YStart + MenuPoint, XStart + 1 ' Позиционирование курсора
PRINT " "; MenuList$(MenuPoint); " " ' Вывод пункта меню
RETURN
EndMenu:
END DEF
ExitFlag$ = "No" ' Сброс флага "Выход"
DO ' Цикл работы программы
SELECT CASE FnMenu% ' Выбор действия по ответу на меню
CASE 1
CASE 2
CASE 3
CASE 255
ExitFlag$ = "Yes" ' Подъем флага "Выход"
END SELECT
LOOP UNTIL ExitFlag$ = "Yes"
END
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию