138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
1

Навигация по меню с помощью клавиш

03.04.2012, 19:08. Показов 13913. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появился вопрос,как сделать в си чтобы в консольном окне( В черненьком)) ) по меню можно было двигаться с помощью нажатых клавиш вверх и вниз,с соответствующим цветом на котором остановились

Чтобы например как в ниже примере надо было не выбирать пункт нажатием 1 или 2..... или 6 чтоб выйти а двигаться с помощью стрелок вверх и вниз по меню соответственно не будет тогда строки ваш вариант,просто нужный например пункт выбрал и нажал ентер и выполняется например если на 2 остановились нажали ентер там идет дальще вычисление

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int a;
    while(true)
    {
    printf("1.Sozdat");
        printf("\n2.Dobavit");
            printf("\n3.Udalit");
                printf("\n4.Naiti");
                    printf("\n5.Zapisat v fail");
                        printf("\n6.Exit");
    printf("\n\nVash variant: ");
    scanf("%i",&a);
    if(a==1)
    {
        //  код какой нить
            }
    //.....................
    if(a==6)
    {
            break;
            }
    }
    return 0;
}

Как это реализовать? надеюсь поняли что я хотел спросить
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 19:08
Ответы с готовыми решениями:

Создание меню в консольном приложении и навигация по нему с помощью клавиш
У меня стоит такая задача, допустим есть в консоле такая менюшка: Выберите действие: 1) первое...

Навигация с помощью клавиш по таблице?
Есть таблица, при наведении мышки на строку в таблицы, строка подсвечиваеться. Как сделать чтобы...

Организуйте перемещение по пунктам меню с помощью клавиш
Организуйте перемещение по пунктам меню с помощью клавиш Стрелка вверх и Стрелка вниз. После выбора...

Навигация по сайту с использованием горячих клавиш
Я сделала на сайте постраничную навигацию, и прикрутила к ссылкам предыдущая/следующая горячие...

8
Заблокирован
Автор FAQ
03.04.2012, 20:21 2
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Как это реализовать?
- довольно просто
https://www.cyberforum.ru/blogs/34326/blog263.html
1
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
04.04.2012, 11:38  [ТС] 3
Дак а нам же еще нужно подсветить нужный пункт меню на котором остановимся при движении вверх и вниз по меню
1
Заблокирован
Автор FAQ
04.04.2012, 11:46 4
a.n.o.n.i.m, покажи свои наработки,"подсветить" можно настоящим цветом,либо псевдографикой(например перемещая символ >),пока чего-то конкретного в твоем коде я не вижу
0
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
04.04.2012, 11:56  [ТС] 5
конкретного задания нет,нужен просто пример перемещения по меню в окне с подсветкой

На паскале видел исходник там двигаться можно было по матрице,но мне просто по меню чтоб не нажимать кнопку выбора 1 или 2 или так далее,а стрелками выбрать нужный пункт меню и он скажем будет подсвечен белым,нажму ентер он выберется,самый простенький пример реальззации нужен

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
procedure TMatrix.ShowMatrix;{Выводим редактор матрицы}
var colnum,rownum,LenMaxValue,SelCol,SelRow,GranicaRow,GranicaCol:Integer;
    value:String;
    ch:char;                                 {считанный с клавы символ}
    Showed:boolean;                          {переменная чтобы запомнить что матрица еще не выведена}
begin
ch:=' ';                                     {символ еще не считан}
SelRow:=1;                                   {Курсор стоит на первой строке};
SelCol:=1;                                   {и на первом столбце}
Showed:=false;                               {Еще не вывели матрицу}
textcolor(15);                               {Задаем белый цвет текста}
LenMaxValue:=length(IntToStr(Self.MaxValue));{Длинна символов максимальное значение матрицы}
repeat
  if Keypressed or (not Showed) then         {Если нажали какую-то клавишу или ещё не вывели матрицу}
  begin
    clrscr;                                  {Очистка экрана}
    if Keypressed then ch:=readkey;          {Считали код клавиши}
    case ch of
      #13:
      begin                                  {нажали Enter}
        clrscr;                              {Очистка экрана}
        write('Vvedite Matrix[',SelCol,',',SelRow,']:'); 
        readln(Self.Col[SelCol]^[SelRow]);   {ввод значения в матрицу}
        clrscr;                              {Очистка экрана}
      end;
      #0:
      begin
        ch:=readkey;                         {считывает в символьную переменную ch нажатую пользователем клавишу}
        {Клавиши перемещения по матрице}
         if (ch=#72)and(SelRow>1) then dec(SelRow) else         {vverh} 
          if (ch=#80)and(SelRow<CountRows) then inc(SelRow) else{вниз}
            if (ch=#75)and(SelCol>1) then dec(SelCol) else      {влево}
              if (ch=#77)and(SelCol<CountCols) then inc(SelCol);{Вправо}
 
      end;
    end;
 
        {Granica vyvoda}
    {Определяем какую часть матрицы нужно вывести на экран,нужно для того чтобы листать матрицу}
    if SelRow<=CountRows-24 then GranicaRow:=SelRow+23  {строка на которой курсор}
      else GranicaRow:=CountRows;
    if SelCol<=CountCols-15 then GranicaCol:=SelCol+15  {столбец на котором курсор}
      else GranicaCol:=CountCols;
 
     for rownum:=SelRow to GranicaRow do      {Выводим столбцы от текущего выбора, до того что влазит на экран}
    begin
      for colnum:=SelCol to GranicaCol do    {Выводим строки от текущего выбора, до того что влазит на экран}
      begin
        if (SelCol=colnum) and (SelRow=rownum) then textcolor(4){если выбран этот элемент в отображении то рисуем его красным цветом}
          else textcolor(15);                {задаем белый цвет}
        write(format(Self.Col[colnum]^[rownum],LenMaxValue),' ');{выводим элемент матрицы(ColNum,RowNum) с выравниванием столбцов друг к другу}
      end;
      writeln;                               {переход на новую строку в выводе}
    end;
    Showed:=true;
  end;
until ch=#27; {Nazhali Escape} 
textcolor(15);{vozvrashaem beli}
end;
Добавлено через 2 минуты
Да даже просто как двигаться в коде их первого поста по пунктам меню с подсветкой
1
Заблокирован
Автор FAQ
04.04.2012, 12:35 6
Лучший ответ Сообщение было отмечено как решение

Решение

a.n.o.n.i.m, предлагаю простой вариант на псевдографике
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <windows.h>
#include <stdio.h>
 
void ShowMenu(int iItem)
{
    system("cls");
    printf("%s1 - 1-st item\n",iItem == 1 ? ">" : " ");
    printf("%s2 - 2-nd item\n",iItem == 2 ? ">" : " ");
    printf("%s3 - 3-rd item\n",iItem == 3 ? ">" : " ");
    printf("%s4 - 4-th item\n",iItem == 4 ? ">" : " ");
    printf("%s5 - 5-th item\n",iItem == 5 ? ">" : " ");
}
 
int main()
{
    int iItem = 1;//Отвечает какой пункт меню активен в данный момент
    int nLast = 5;//Отвечает какой индекс у последнего пункта меню
    ShowMenu(iItem);
    while(TRUE)
    {
        if(GetAsyncKeyState(VK_UP))
        {
            keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(0 < iItem - 1)
                iItem = iItem - 1;
            else
                iItem = nLast;
            ShowMenu(iItem);
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(iItem < nLast)
                iItem = iItem + 1;
            else
                iItem = 1;
            ShowMenu(iItem);
        }
        if(GetAsyncKeyState(VK_RETURN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            ShowMenu(iItem);
            switch(iItem)
            {
            case 1:
                printf("Run 1-st item of menu\n");
                break;
            case 2:
                printf("Run 2-nd item of menu\n");
                break;
            case 3:
                printf("Run 3-rd item of menu\n");
                break;
            case 4:
                printf("Run 4-th item of menu\n");
                break;
            case 5:
                printf("Run 5-th item of menu\n");
                break;
            }
        }
    }
    return 0;
}
PS:Хочешь цвет в меню, тогда смотри эту тему
Форматирование текста и изменение цвета текста в консоли, там кроме цвета и позиционирование курсора рассматривал
Миниатюры
Навигация по меню с помощью клавиш  
7
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
04.04.2012, 12:56  [ТС] 7
Это уже почти то что я хотел,а можешь для этого примера сделать передвижение цветом?
1
5 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 48
30.04.2015, 20:18 8
Слишком круто получается по ресурсам. У меня двухядерный процессор, на картинке загрузка ЦП
Миниатюры
Навигация по меню с помощью клавиш  
0
-=ЮрА=-
01.05.2015, 20:36     Навигация по меню с помощью клавиш
  #9

Не по теме:

Otello, код давался чтобы кроме копипаста человек подключал мозг, руки и другие части тела и доводил уже под свои надобности.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2015, 20:36

Навигация на сайте с помощью JavaScript
Всем привет! Ребят, помогите пожалуйста сделать навигацию на сайте с помощь JavaScript или...

Навигация меню
Перенес окно поиска под шапку, но столкнулся с проблемой, что разделы в таком случае не в один ряд...

AutoCWM навигация в меню
Установил autoCWM 5.5.0.4 Телефон Lenovo A316i Перезапускаю телефон,захожу в рекавери, но вот...

Выпадающее меню - навигация
Здравствуйте! Я создаю html сайт и заказчик попросил сделать выпадающее меню по типу: Пункт-1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru