Seznam možností v menu
Dalším rozšířením uživatelské nabídky je uvedení seznamu možností, ze kterého může být aktivní pouze jedna položka. Možnosti seznamu musí být všechny na jedné kartě a musí následovat za sebou. Ke konstantě pro klávesovou zkratku první z možností je potřeba přičíst hodnotu $0900 (KMenuOptionStart%), u poslední z možností konstantu $0B00 (KMenuOptionEnd%) a ke všem zbývajícím mezi nimi konstantu $0A00 (KMenuOptionMiddle%). Ke konstantě u zvolené položky menu musíme pak přičíst hodnotu $2000 (KMenuSymbolOn%).
INCLUDE "Const.oph" PROC menu: GLOBAL polozka% LOCAL k%, m%, k_1%, k_2%, k_3% PRINT "Stiskni Menu pro nabídku Esc pro konec" WHILE 1 k%=GET IF k%=KKeyEsc% STOP ELSEIF k%=KGetMenu% k_1%=0 : k_2%=0 : k_3%=0 IF polozka%=3 k_3%=KMenuSymbolOn% ELSEIF polozka%=2 k_2%=KMenuSymbolOn% ELSE k_1%=KMenuSymbolOn% ENDIF mINIT mCARD "Soubor", "Nový", %n, "Otevřít", %o, "Konec", %e mCARD "Velikost", "1x", 1+$0900+k_1%, "2x", 2+$0A00+k_2%, "3x", 3+$0B00+k_3% m%=MENU PRINT "Volba z menu byla "; m%; " (";CHR$(m%); ")" IF m%=1 OR m%=2 OR m%=3 polozka%=m% ENDIF IF m%=%e : STOP : ENDIF ENDIF ENDWH ENDP
Kaskádová menu
mCASC jmeno$, text_1$, klavesa_1%, text_2$, klavesa_2%, ...
Pokud je menu příliš komplexní a všechny položky by se nevešly na displej, tak je možné vytvářet kaskádová menu - po zvolení jedné položky menu, která je většinou označena šipkou, se zobrazí další nabídka. Tyto podřízené nabídky definujeme pomocí příkazu mCASC.
Příkaz mCASC má stejnou strukturu i parametry jako mCARD - začíná jménem kaskádového menu a pokračuje definicí položek. I ve vnořených nabídkách můžeme používat zaškrtnutí nebo seznamy možností.
Definice vnořeného menu musí předcházet definici karty menu, ve které je kaskádové menu použito. V definici hlavního menu uvedeme jméno kaskádového menu, za kterým bude uveden znak ">". Můžeme uvést i konstantu pro klávesovou zkratku - v takovém případě bude tato kombinace kláves cyklicky přepínat položky kaskádového menu. Většinou však tuto možnost nevyužijeme a místo kódu klávesy použijeme číslo mezi 1 a 32.
INCLUDE "Const.oph" PROC kaskada: LOCAL k%, m% PRINT "Stiskni Menu pro nabídku Esc pro konec" WHILE 1 k%=GET IF k%=KKeyEsc% STOP ELSEIF k%=KGetMenu% mINIT mCASC "Tisk", "Prohlédnout", %p, "Tisk", %t mCASC "Infračervené", "Pošli", %P, "Příjem", %R mCARD "Soubor", "Nový", %n, "Otevřít", -%o, "Tisk>", 1, "Infračervené>", 2, "Konec", %e mCASC "Velikost", "1x", $2900+21, "2x", $0A00+22, "3x", $0B00+23 mCARD "Možnosti", "Velikost>", -3, "Nastavení", %N mCASC "Téma", "Soubory", 10, "Tisk", 11, "Infračervené", 12, "Zobrazení", 13 mCARD "Nápověda", "O programu", -%O, "Téma>", 4 m%=MENU PRINT "Volba z menu byla "; m%; " (";CHR$(m%); ")" IF m%=%e : STOP : ENDIF ENDIF ENDWH ENDP
Nesmíme zapomenout uvést u každé položky nabídky včetně položek kaskádových menu jinou klávesovou zkratku (nebo jinou číselnou hodnotu). Pokud tuto podmínku nedodržíme, nebude možné podle hodnoty vrácené příkazem MENU rozlišit, která položka byla stisknutá.
Nyní již umíme doplnit naše programy o důležité prvky uživatelského rozhraní. Zatím však neumí ukládat ani číst žádná data. V příštím dílu budeme psát o souborech, databázích, knihovnách OPX a obecně o všem, co souvisí se vstupem a výstupem dat.