QBASICBOOK.ru: сайт про QB64

Опубликовано: 2020-06-30 08:00:00

Отрисовка вертикального меню

В этой статье представлена неплохая реализация отрисовки вертикального меню.

Требуется вывести на экран в столбец пункты меню, примерно так:

Пункт 1

Пункт 2

...

Пункт 10

Пункт 1 выделить другим цветом. И ждать нажатия клавиш стрелок вверх и вниз. При нажатии стрелки вниз Пункт i закрашивается фоновым цветом, а Пункт i + 1 выделяется. Если сейчас выделен первый пункт, то выделяется последний. При нажатии стрелки вверх Пункт i закрашивается фоновым цветом, а Пункт i - 1 выделяется. Если сейчас выделен последний пункт, то выделяется первый.

Рассмотрим исходный текст программы:


  1. VIB% = 0 ' TEKUSHCHIY VYBOR
  2. DRW% = 1 ' NARISUYEM MENYU V SAMOM NACHALE
  3. DO '  ETO BESKONECHNYY TSIKL S POSTUSLOVIYEM
  4.     '  ETO POLUCHENIYE KODOV NAZHATYKH KLAVISH
  5.     '  T.E. YESLI KLAVISHA BYLA NAZHATA, YEYE
  6.     '  KOD V STROKOVOM VYRAZHENII ZAPISHETSYA
  7.     '  V STROKOVUYU PEREMENNUYU KB$, A YESLI
  8.     '  NE BYLO NAZHATIY KLAVISH, TO SOOTV.
  9.     '  PEREMENNAYA BUDET PUSTYM ZNACHENIYEM.
  10.     KB$ = INKEY$
  11.  
  12.     '  ETO MY PROVERYAYEM NAZHATA LI KLAVISHA VVERKH(SMOTRIM KB$)
  13.     '  I OTNIMAYEM YEDINITSU OT ZNACHENIYA VYBRANNOGO PUNKTA, YESLI
  14.     '  YEGO ZNACHENIYE BOLSHE NULYA, T.E. NE DAYEM VYYTI ZA NOL.
  15.     '  POSLE IZMENENIYA ZNACHENIYA, STAVIM FLAG OTRISOVKI MENYU
  16.     IF KB$ = CHR$(0) + "H" AND VIB% > 0 THEN VIB% = VIB% - 1: DRW% = 1
  17.  
  18.     '  ETO MY PROVERYAYEM NAZHATA LI KLAVISHA VNIZ
  19.     '  I PRIBAVLYAYEM YEDINITSU K ZNACHENIYU VYBRANNOGO PUNKTA, YESLI
  20.     '  YEGO ZNACHENIYE MENSHE DVUKH, T.E. MY OGRANICHIVAYEM KOL-VO
  21.     '  PUNKTOV TREMYA ZNACHENIYAMI: 0, 1, 2
  22.     '  TAKZHE POSLE IZMENENIYA ZNACHENIYA, STAVIM FLAG OTRISOVKI MENYU
  23.     IF KB$ = CHR$(0) + "P" AND VIB% < 2 THEN VIB% = VIB% + 1: DRW% = 1
  24.  
  25.     '  TUT BUDET VYBOR PUNKTA MENYU ENTER'OM
  26.     IF KB$ = CHR$(13) THEN
  27.         '  PUST NADPIS VYVODITSYA VVERKHU, ZHELTYM TSVETOM
  28.         LOCATE 1, 1: COLOR 14
  29.         '  SELEKT KEYZU SKARMLIVAYEM PEREMENNUYU,
  30.         '  PO ZNACHENIYU KOTOROY NUZHNO PROIZVESTI VYBOR
  31.         '  DALEYE PISHEM CASE, NOMER PUNKTA I KOD DLYA VYPOLNENIYA
  32.         '  DVOYETOCHIYE RAVNOSILNO PEREVODU NA DRUGUYU STROKU, T.E.
  33.         '  YESLI BY MY PISALI KOD NA SLEDUYUSHCHEY STROKE.
  34.         SELECT CASE VIB%
  35.             CASE 0: PRINT "PUNKT 1"
  36.             CASE 1: PRINT "PUNKT 2"
  37.             CASE 2: PRINT "PUNKT 3"
  38.             CASE ELSE ' ETOY STROCHKI TREBUYUT NEKOTORYYE KOMPILYATORY
  39.                 ' PO SUTI ETO ISKLYUCHAYUSHCHEYE USLOVIYE, T.E. YESLI
  40.                 ' NI ODIN PUNKT NE VYBRAN, TO VYPOLNITSYA KOD
  41.                 ' MEZHDU CASE ELSE I END SELECT(ODNAKO ETOGO
  42.                 ' NIKOGDA NE PROIZOYDET).
  43.         END SELECT
  44.     END IF
  45.  
  46.     '  ETO USLOVIYE OTRISOVKI MENYU
  47.     '  POSLE IZMENENIYA VYBRANNOGO PUNKTA
  48.     '  ONO YEDINORAZOVO VYPOLNYAYETSYA
  49.     IF DRW% = 1 THEN
  50.         '  SBROSIM FLAG OTRISOVKI, CHTOBY NE
  51.         '  VYPOLNYAT MNOG RAZ. NAM NUZHNO
  52.         '  PERERISOVYVAT MENYU TOLKO TOGDA,
  53.         DRW% = 0 '  KOGDA VYBRANNYY PUNKT IZMENILSYA.
  54.         '  TUT STAVIM POZITSIYU PECHATI V ZADANNUYU TOCHKU(LOCATE)
  55.         '  I PROVERYAYEM ROVNYAYETSYA LI ZNACHENIYE VYBRANNOGO PUNKTA
  56.         '  ZNACHENIYU PUNKTA KOTORYY V TEK. MOMENT OTRISOVYVAYEM.
  57.         '  YESLI ROVNYAYETSYA, ZNACHIT ETO I YEST VYBRANNYY PUNKT,
  58.         '  POMECHAYEM YEGO OSOBYM TSVETOM(11), V PROTIVNOM SLUCHAYE STAVIM
  59.         '  YEMU OBYCHNYY TSVET(8).
  60.         '  TSVET ZADAYETSYA OPERATOROM COLOR
  61.  
  62.         '  PUNKT 1
  63.         LOCATE 5, 10: IF VIB% = 0 THEN COLOR 11 ELSE COLOR 8
  64.  
  65.         '  PECHATAYEM NASH PUNKT
  66.         PRINT "PUNKT 1"
  67.  
  68.         '  PUNKT 2
  69.         LOCATE 6, 10: IF VIB% = 1 THEN COLOR 11 ELSE COLOR 8
  70.  
  71.         '  PECHATAYEM NASH PUNKT
  72.         PRINT "PUNKT 2"
  73.  
  74.         '  PUNKT 3
  75.         LOCATE 7, 10: IF VIB% = 2 THEN COLOR 11 ELSE COLOR 8
  76.  
  77.         '  PECHATAYEM NASH PUNKT
  78.         PRINT "PUNKT 3"
  79.  
  80.     END IF '  KONETS OTRISOVKI MENYU
  81.  
  82.     '  TUT KOD TSIKLA ZAKANCHIVAYETSYA
  83.     '  ZAODNO POSTAVIM POSTUSLOVIYE NA VYKHOD IZ TSIKLA
  84.     '  PO NAZHATIYU KLAVISHI ESCAPE
  85. LOOP UNTIL KB$ = CHR$(27)
  86.  
  87. CLS '  OCHISTIM EKRAN, DALSHE NIKAKIKH END'OV NE NADO
  88. '  INTERPRETATOR I TAK POYMET CHTO ETO KONETS PROGRAMMY.

Рисунок 1 – Исходный текст для отрисовки вертикального меню 

Рисунок 1 – Исходный текст для отрисовки вертикального меню

Рисунок 2 – Результат отрисовки вертикального меню 

Рисунок 2 – Результат отрисовки вертикального меню

 

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Рисуем 3D-функции
Следующая статья >
Анимация фейерверка

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.