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
#include "Tmenu.h"
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; }
Brak komentarzy:
Prześlij komentarz