Deutsch

Воспоминания, Turbo C 01.06.2024

06.06.24 14:43
Re: Воспоминания, Turbo C 01.06.2024
 
uscheswoi_82 коренной житель
uscheswoi_82

Улучшил только-что код меню, незаметил while(!kbhit()), а надо while(1):

#include <stdio.h>
#include <conio.h>
#include <bios.h>

#define LEFT    19200 
#define RIGHT   19712
#define ESC     283
#define ENTER   7181
#define MAX_MENUS 4

char *menus[MAX_MENUS] = {"File", "Edit", "Options", "Help"};
char *menus_help[MAX_MENUS] = {"Create a new file, open an exist file, or save into a file",
                               "Copy, paste, cut, etc.", 
                               "Options of program", 
                               "Help"};
int menus_pos[MAX_MENUS] = {1, 10, 20, 30};

int main(void) {
  int key = 0, sel = 0, j = 0;
  textattr(BLACK*0x10+LIGHTGRAY);
  clrscr();


  while(1) {
    gotoxy(1, 1);
    textattr(LIGHTGRAY*0x10+BLACK);
    for(j=0; j<80; j++) cprintf(" ");


    gotoxy(1, 24);
    textattr(LIGHTGRAY*0x10+BLACK);
    for(j=0; j<80; j++) cprintf(" ");
  
    gotoxy(1, 1);
    for(j=0; j<MAX_MENUS; j++) {
      gotoxy(menus_pos[j], 1);
      cprintf(" %s ", menus[j]);
    }


    gotoxy(menus_pos[sel], 1);
    textattr(GREEN*0x10+YELLOW);
    cprintf(" %s ", menus[sel]);
    gotoxy(1, 24);
    textattr(LIGHTGRAY*0x10+BLACK);
    cprintf(" %s ", menus_help[sel]);
    gotoxy(1, 1);
    key = bioskey(0);
    switch(key) {
      case ENTER:
        gotoxy(1, 2);
        textattr(RED*0x10+YELLOW);
        cprintf("Selected menu: %s     ", menus[sel]);
      break;
      case ESC:
        textattr(BLACK*0x10+LIGHTGRAY);
        clrscr();
        return 0;
      break;
      case LEFT:
        if(sel > 0) sel--; else sel = MAX_MENUS-1;
      break;
      case RIGHT:
        if(sel < MAX_MENUS-1) sel++; else sel = 0;
      break;
    }
  }
  return 0;
}


А вот и результат! Вуаля!:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
 

Перейти на