Опубликовано: 2020-06-30 08:00:00
Отрисовка вертикального меню
В этой статье представлена неплохая реализация отрисовки вертикального меню.
Требуется вывести на экран в столбец пункты меню, примерно так:
Пункт 1
Пункт 2
...
Пункт 10
Пункт 1 выделить другим цветом. И ждать нажатия клавиш стрелок вверх и вниз. При нажатии стрелки вниз Пункт i закрашивается фоновым цветом, а Пункт i + 1 выделяется. Если сейчас выделен первый пункт, то выделяется последний. При нажатии стрелки вверх Пункт i закрашивается фоновым цветом, а Пункт i - 1 выделяется. Если сейчас выделен последний пункт, то выделяется первый.
Рассмотрим исходный текст программы:
- VIB% = 0 ' TEKUSHCHIY VYBOR
- DRW% = 1 ' NARISUYEM MENYU V SAMOM NACHALE
- DO ' ETO BESKONECHNYY TSIKL S POSTUSLOVIYEM
- ' ETO POLUCHENIYE KODOV NAZHATYKH KLAVISH
- ' T.E. YESLI KLAVISHA BYLA NAZHATA, YEYE
- ' KOD V STROKOVOM VYRAZHENII ZAPISHETSYA
- ' V STROKOVUYU PEREMENNUYU KB$, A YESLI
- ' NE BYLO NAZHATIY KLAVISH, TO SOOTV.
- ' PEREMENNAYA BUDET PUSTYM ZNACHENIYEM.
- KB$ = INKEY$
- ' ETO MY PROVERYAYEM NAZHATA LI KLAVISHA VVERKH(SMOTRIM KB$)
- ' I OTNIMAYEM YEDINITSU OT ZNACHENIYA VYBRANNOGO PUNKTA, YESLI
- ' YEGO ZNACHENIYE BOLSHE NULYA, T.E. NE DAYEM VYYTI ZA NOL.
- ' POSLE IZMENENIYA ZNACHENIYA, STAVIM FLAG OTRISOVKI MENYU
- IF KB$ = CHR$(0) + "H" AND VIB% > 0 THEN VIB% = VIB% - 1: DRW% = 1
- ' ETO MY PROVERYAYEM NAZHATA LI KLAVISHA VNIZ
- ' I PRIBAVLYAYEM YEDINITSU K ZNACHENIYU VYBRANNOGO PUNKTA, YESLI
- ' YEGO ZNACHENIYE MENSHE DVUKH, T.E. MY OGRANICHIVAYEM KOL-VO
- ' PUNKTOV TREMYA ZNACHENIYAMI: 0, 1, 2
- ' TAKZHE POSLE IZMENENIYA ZNACHENIYA, STAVIM FLAG OTRISOVKI MENYU
- IF KB$ = CHR$(0) + "P" AND VIB% < 2 THEN VIB% = VIB% + 1: DRW% = 1
- ' TUT BUDET VYBOR PUNKTA MENYU ENTER'OM
- IF KB$ = CHR$(13) THEN
- ' PUST NADPIS VYVODITSYA VVERKHU, ZHELTYM TSVETOM
- LOCATE 1, 1: COLOR 14
- ' SELEKT KEYZU SKARMLIVAYEM PEREMENNUYU,
- ' PO ZNACHENIYU KOTOROY NUZHNO PROIZVESTI VYBOR
- ' DALEYE PISHEM CASE, NOMER PUNKTA I KOD DLYA VYPOLNENIYA
- ' DVOYETOCHIYE RAVNOSILNO PEREVODU NA DRUGUYU STROKU, T.E.
- ' YESLI BY MY PISALI KOD NA SLEDUYUSHCHEY STROKE.
- SELECT CASE VIB%
- CASE 0: PRINT "PUNKT 1"
- CASE 1: PRINT "PUNKT 2"
- CASE 2: PRINT "PUNKT 3"
- CASE ELSE ' ETOY STROCHKI TREBUYUT NEKOTORYYE KOMPILYATORY
- ' PO SUTI ETO ISKLYUCHAYUSHCHEYE USLOVIYE, T.E. YESLI
- ' NI ODIN PUNKT NE VYBRAN, TO VYPOLNITSYA KOD
- ' MEZHDU CASE ELSE I END SELECT(ODNAKO ETOGO
- ' NIKOGDA NE PROIZOYDET).
- END SELECT
- END IF
- ' ETO USLOVIYE OTRISOVKI MENYU
- ' POSLE IZMENENIYA VYBRANNOGO PUNKTA
- ' ONO YEDINORAZOVO VYPOLNYAYETSYA
- IF DRW% = 1 THEN
- ' SBROSIM FLAG OTRISOVKI, CHTOBY NE
- ' VYPOLNYAT MNOG RAZ. NAM NUZHNO
- ' PERERISOVYVAT MENYU TOLKO TOGDA,
- DRW% = 0 ' KOGDA VYBRANNYY PUNKT IZMENILSYA.
- ' TUT STAVIM POZITSIYU PECHATI V ZADANNUYU TOCHKU(LOCATE)
- ' I PROVERYAYEM ROVNYAYETSYA LI ZNACHENIYE VYBRANNOGO PUNKTA
- ' ZNACHENIYU PUNKTA KOTORYY V TEK. MOMENT OTRISOVYVAYEM.
- ' YESLI ROVNYAYETSYA, ZNACHIT ETO I YEST VYBRANNYY PUNKT,
- ' POMECHAYEM YEGO OSOBYM TSVETOM(11), V PROTIVNOM SLUCHAYE STAVIM
- ' YEMU OBYCHNYY TSVET(8).
- ' TSVET ZADAYETSYA OPERATOROM COLOR
- ' PUNKT 1
- LOCATE 5, 10: IF VIB% = 0 THEN COLOR 11 ELSE COLOR 8
- ' PECHATAYEM NASH PUNKT
- PRINT "PUNKT 1"
- ' PUNKT 2
- LOCATE 6, 10: IF VIB% = 1 THEN COLOR 11 ELSE COLOR 8
- ' PECHATAYEM NASH PUNKT
- PRINT "PUNKT 2"
- ' PUNKT 3
- LOCATE 7, 10: IF VIB% = 2 THEN COLOR 11 ELSE COLOR 8
- ' PECHATAYEM NASH PUNKT
- PRINT "PUNKT 3"
- END IF ' KONETS OTRISOVKI MENYU
- ' TUT KOD TSIKLA ZAKANCHIVAYETSYA
- ' ZAODNO POSTAVIM POSTUSLOVIYE NA VYKHOD IZ TSIKLA
- ' PO NAZHATIYU KLAVISHI ESCAPE
- LOOP UNTIL KB$ = CHR$(27)
- CLS ' OCHISTIM EKRAN, DALSHE NIKAKIKH END'OV NE NADO
- ' INTERPRETATOR I TAK POYMET CHTO ETO KONETS PROGRAMMY.
Рисунок 1 – Исходный текст для отрисовки вертикального меню
Рисунок 2 – Результат отрисовки вертикального меню
Спасибо за прочтение этой статьи.