Witajcie,
Przedstawiam bibliotekę Tmenu.h która pozwala na proste tworzenie przewijanych menu za pomocą strzałek.
Z części programu można skorzystać jako biblioteka lub jako część kodu bez dołączania dodatkowych bibliotek.
Aktywna opcja w programie zanaczona jest na kolor czerwony. Aby ją aktywować należy naciskąć w konsoli kalwisz enter.
Aby przewinąć opcję do góry należy nacisnąć strzałkę do góry.
Aby przewinąć opcję do dołu należy nacisnąć strzałkę do dołu.
Skorzystanie z programu jako biblioteka:
Do katalogu z programem dodaj plik
Tmenu.h a następnie w dodaj do programu jako bibliotekę używając
Można także dodać zawartość biblioteki do swojego programu wtedy nie jest wymagane tworzenie biblioteki jednak w praktyce rozdziela się programy na biblioteki.
Obsług biblioteki jest bardzo prosta:
W kontekście każdego z menu należy dodać jego tytuł:
TMenu Menu("Tytuł menu");
Następnie kolejne opcje w menu wraz z nazwą dodajemy za pomocą Menu.add podając najpierw nazwę następnie funkcję którą wywołuje (w tym przypadku tytuł to
Funkcja 1 a opcja wywołuje funkcję
f1:
Menu.add("Funkcja 1", f1);
Screany z dzialania programu:
Kody źródłowe z dwoma przykładami wykorzystania przewijanego menu - jako część kodu źródłowego programu oraz jako dołączona biblioteka do projektu.
Kod źródłowy biblioteki Tmenu.h:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <iomanip>
using namespace std;
class TMenu
{
public:
TMenu(string _Title);
TMenu(void);
void add(string _Name, void (*procedure) () );
void view();
void SetTitle(string _Title);
private:
struct TItem
{
string Name;
void (*procedure)();
};
string Title;
string Max;
string spac;
int max;
int index;
vector <TItem> List;
};
TMenu::TMenu(string _Title)
{
//system("windows1250");
Title = _Title;
max = Title.size() + 4;
index = 0;
}
void TMenu::add(string Name, void (*procedure) ())
{
if (Name != "")
{
TItem item;
item.Name = Name;
item.procedure = procedure;
List.push_back(item);
max = (Name.size() + 4 > max)? Name.size() + 4 : max;
Max = "";
spac = "";
for (int i = 0; i < max; i ++)
{
Max += '-';
spac += ' ';
}
}
}
void TMenu::view()
{
//system("windows1250");
char c = '/0';
do
{
system("cls");
cout << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << " +" << Max << '+' << endl;
cout << " |"
<< spac.substr(0, (max - Title.size()) / 2)
<< Title
<< spac.substr(0, max - Title.size() - ((max - Title.size()) / 2))
<< '|' << endl;
cout << " +" << Max.substr(0, max) << '+' << endl;
for (int i = 0; i < List.size(); i ++)
{
cout << " |";
if (i == index)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_INTENSITY);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}
cout << spac.substr(0, (max - List[i].Name.size()) / 2)
<< List[i].Name
<< spac.substr(0, (max - (List[i].Name.size()) - (max - List[i].Name.size()) / 2) );
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << '|' << endl;
}
cout << " +" << Max << "+";
c = getch();
if (c == 72 && index > 0) //down
{
index --;
}
if (c == 80 && index < List.size() - 1) //up
{
index ++;
}
}
while (c != 13 && c != 27);
if (c == 27)
{
system("exit");
}
if (c == 13)
{
//cout << index << endl; //80 down
system("cls");
(*List[index].procedure)();
}
}
Kod źródłowy programu wykorzystującego bibliotekę Tmenu.h:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <iomanip>
#include "Tmenu.h"
using namespace std;
void main_menu();
void f1()
{
TMenu Menu("Funkcja 1");
Menu.add("Funkcja 1.1", f1);
Menu.add("Funkcja 1.2", f1);
Menu.add("Funkcja 1.3", f1);
Menu.add("Funkcja 1.4", f1);
Menu.add("Funkcja 1.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f2()
{
TMenu Menu("Funkcja 2");
Menu.add("Funkcja 2.1", f2);
Menu.add("Funkcja 2.2", f2);
Menu.add("Funkcja 2.3", f2);
Menu.add("Funkcja 2.4", f2);
Menu.add("Funkcja 2.5", f2);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f3()
{
TMenu Menu("Funkcja 3");
Menu.add("Funkcja 3.1", f1);
Menu.add("Funkcja 3.2", f1);
Menu.add("Funkcja 3.3", f1);
Menu.add("Funkcja 3.4", f1);
Menu.add("Funkcja 3.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f4()
{
TMenu Menu("Funkcja 4");
Menu.add("Funkcja 4.1", f1);
Menu.add("Funkcja 4.2", f1);
Menu.add("Funkcja 4.3", f1);
Menu.add("Funkcja 4.4", f1);
Menu.add("Funkcja 4.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f5()
{
TMenu Menu("Funkcja 5");
Menu.add("Funkcja 5.1", f1);
Menu.add("Funkcja 5.2", f1);
Menu.add("Funkcja 5.3", f1);
Menu.add("Funkcja 5.4", f1);
Menu.add("Funkcja 5.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f_exit()
{
cout<<"Program zostanie zamknięty"<<endl;
_sleep(1000);
system("cls");
system("color f");
exit(0);
}
void main_menu()
{
TMenu Menu("Program");
Menu.add("Funkcja 1", f1);
Menu.add("Funkcja 2", f2);
Menu.add("Funkcja 3", f3);
Menu.add("Funkcja 4", f4);
Menu.add("Funkcja 5", f5);
Menu.add("Zamknij program", f_exit);
Menu.view();
}
int main()
{
setlocale( LC_ALL, "" );
main_menu();
return 0;
}
Kod źródłowy programu bez dodawania biblioteki (jako część programu):
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <iomanip>
using namespace std;
void main_menu();
class TMenu
{
public:
TMenu(string _Title);
TMenu(void);
void add(string _Name, void (*procedure) () );
void view();
void SetTitle(string _Title);
private:
struct TItem
{
string Name;
void (*procedure)();
};
string Title;
string Max;
string spac;
int max;
int index;
vector <TItem> List;
};
TMenu::TMenu(string _Title)
{
//system("windows1250");
Title = _Title;
max = Title.size() + 4;
index = 0;
}
void TMenu::add(string Name, void (*procedure) ())
{
if (Name != "")
{
TItem item;
item.Name = Name;
item.procedure = procedure;
List.push_back(item);
max = (Name.size() + 4 > max)? Name.size() + 4 : max;
Max = "";
spac = "";
for (int i = 0; i < max; i ++)
{
Max += '-';
spac += ' ';
}
}
}
void TMenu::view()
{
//system("windows1250");
char c = '/0';
do
{
system("cls");
cout << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << " +" << Max << '+' << endl;
cout << " |"
<< spac.substr(0, (max - Title.size()) / 2)
<< Title
<< spac.substr(0, max - Title.size() - ((max - Title.size()) / 2))
<< '|' << endl;
cout << " +" << Max.substr(0, max) << '+' << endl;
for (int i = 0; i < List.size(); i ++)
{
cout << " |";
if (i == index)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_INTENSITY);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}
cout << spac.substr(0, (max - List[i].Name.size()) / 2)
<< List[i].Name
<< spac.substr(0, (max - (List[i].Name.size()) - (max - List[i].Name.size()) / 2) );
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << '|' << endl;
}
cout << " +" << Max << "+";
c = getch();
if (c == 72 && index > 0) //down
{
index --;
}
if (c == 80 && index < List.size() - 1) //up
{
index ++;
}
}
while (c != 13 && c != 27);
if (c == 27)
{
system("exit");
}
if (c == 13)
{
//cout << index << endl; //80 down
system("cls");
(*List[index].procedure)();
}
}
void f1()
{
TMenu Menu("Funkcja 1");
Menu.add("Funkcja 1.1", f1);
Menu.add("Funkcja 1.2", f1);
Menu.add("Funkcja 1.3", f1);
Menu.add("Funkcja 1.4", f1);
Menu.add("Funkcja 1.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f2()
{
TMenu Menu("Funkcja 2");
Menu.add("Funkcja 2.1", f2);
Menu.add("Funkcja 2.2", f2);
Menu.add("Funkcja 2.3", f2);
Menu.add("Funkcja 2.4", f2);
Menu.add("Funkcja 2.5", f2);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f3()
{
TMenu Menu("Funkcja 3");
Menu.add("Funkcja 3.1", f1);
Menu.add("Funkcja 3.2", f1);
Menu.add("Funkcja 3.3", f1);
Menu.add("Funkcja 3.4", f1);
Menu.add("Funkcja 3.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f4()
{
TMenu Menu("Funkcja 4");
Menu.add("Funkcja 4.1", f1);
Menu.add("Funkcja 4.2", f1);
Menu.add("Funkcja 4.3", f1);
Menu.add("Funkcja 4.4", f1);
Menu.add("Funkcja 4.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f5()
{
TMenu Menu("Funkcja 5");
Menu.add("Funkcja 5.1", f1);
Menu.add("Funkcja 5.2", f1);
Menu.add("Funkcja 5.3", f1);
Menu.add("Funkcja 5.4", f1);
Menu.add("Funkcja 5.5", f1);
Menu.add("Cofnij", main_menu);
Menu.view();
}
void f_exit()
{
cout<<"Program zostanie zamknięty"<<endl;
_sleep(1000);
system("cls");
system("color f");
exit(0);
}
void main_menu()
{
TMenu Menu("Program");
Menu.add("Funkcja 1", f1);
Menu.add("Funkcja 2", f2);
Menu.add("Funkcja 3", f3);
Menu.add("Funkcja 4", f4);
Menu.add("Funkcja 5", f5);
Menu.add("Zamknij program", f_exit);
Menu.view();
}
int main()
{
setlocale( LC_ALL, "" );
main_menu();
return 0;
}