Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu

Úvod do jazyka OPL (14)

aktualizováno 
Pokračujeme v pokročilejším programování v OPL.

Menu

Menu definujeme bezprostředně před jeho zobrazením na displeji. Podobně jako při definici dialogu začíná definice menu příkazem mINIT (bez parametrů), po které následuje vlastní definice uživatelské nabídky (příkazy mCARD a mPOPUP). Po této definici vyvoláme příkaz MENU, který nabídku zobrazí a nechá uživatele vybrat. Poté vrátí příkaz MENU hodnotu odpovídající vybrané položce nebo nulu, pokud uživatel ukončil zobrazení menu klávesou Esc.

Ošetření klávesy Menu v našem programu je zcela v režii programátora. Aplikace používající uživatelskou nabídku by měla při stisknutí klávesy Menu (funkce GET vrátí kód klávesy KGetMenu%) inicializovat menu, vytvořit jednotlivé karty a zobrazit jej.

mCARD jmeno$, text_1$, klavesa_1%, text_2$, klavesa_2%, ...

Příkazem mCARD definujeme jednu kartu uživatelské nabídky. Prvním parametrem příkazu je jméno karty, které je zobrazeno v liště nahoře, a po něm následují dvojice parametrů: text položky menu a numerická hodnota obsahující klávesovou zkratku k rychlému vyvolání položky menu a další vlastnosti. Počet těchto dvojic parametrů je omezen jedině velikostí displeje.

INCLUDE "Const.oph"

PROC menu:
  LOCAL k%, m%
  PRINT "Stiskni Menu pro nabídku Esc pro konec"
  WHILE 1
    k%=GET
    IF k%=KKeyEsc% 
      STOP
    ELSEIF k%=KGetMenu%
      mINIT
      mCARD "Soubor", "Nový", %n, "Otevřít", %o, "Konec", %e
      mCARD "Možnosti", "O programu", %O
      m%=MENU
      PRINT "Volba z menu byla "; m%; " (";CHR$(m%); ")"
      IF m%=%e : STOP : ENDIF
    ENDIF
  ENDWH
ENDP

Jak vidíme na uvedeném příkladu, numerická hodnota může být s výhodou uváděna jako znaková konstanta (uvozená znakem procento). Malá písmena uvozují klávesové zkratky tvaru Ctrl+písmeno, kapitálky slouží pro klávesové zkratky Ctrl+Shift+písmeno. Nechceme-li uvádět klávesovou zkratku, musíme u položky nabídky uvést číslo mezi 1 a 32.

Volání MENU pak vrátí písmeno nebo číslo spojené s položkou nabídky - pozor na rozlišení malých a velkých písmen - nebo hodnotu 0 (pokud uživatel ukončil zobrazení nabídky klávesou Esc). Asi nás nepřekvapí, že můžeme chování položek menu v širokém rozsahu modifikovat konstantami, které přičteme k hodnotě klávesové zkratky.

Je-li klávesová zkratka záporná (například -%a), bude od následující položky oddělena tenkou čarou; přičteme-li ke konstantě hodnotu $1000 (KMenuDimmed%) ,tak nebude tuto položku možné zvolit.

Zaškrtávací položky menu

U položky menu může být uveden symbol zaškrtnutí. V takovém případě uživatel očekává, že je možné stav položky měnit. Přičteme-li ke konstantě pro klávesovou zkratku hodnotu $0800 (KMenuCheckBox%), tak se položka menu bude chovat jako nezaškrtnutá a když ji uživatel zvolí, tak se vedle ní na krátkou dobu zobrazí symbol zaškrtnutí. Pokud k této konstantě ještě přičteme hodnotu $2000 (KMenuSymbolOn%), bude položka na počátku zaškrtnutá a uživatel zvolením zaškrtnutí zruší.

Stav přepínačů si náš program musí pamatovat zvlášť: při definici menu jej vhodně nastavit a podle hodnoty, kterou vrací příkaz MENU, jej měnit. Příklad možného ošetření zaškrtávacích položek je v následujícím rámečku. V globálních proměnných jsou uvedeny proměnné, které obsahují uživatelem zvolené nastavení.

INCLUDE "Const.oph"

PROC menu:
  GLOBAL stav_velke%, stav_male%
  LOCAL k%, m%, k_v%, k_m%
  PRINT "Stiskni Menu pro nabídku Esc pro konec"
  WHILE 1
    k%=GET
    IF k%=KKeyEsc% 
      STOP
    ELSEIF k%=KGetMenu%

      IF stav_velke% : k_v%=$2000 : ELSE : k_v%=0 : ENDIF
      IF stav_male% : k_m%=$2000 : ELSE : k_v%=0 : ENDIF
      
      mINIT
      mCARD "Soubor", "Nový", %n, "Otevřít", %o, "Konec", %e
      mCARD "Možnosti", "Nastavení", -%N, "Velké", %v+$0800+k_v%, "Malé", %m+$0800+k_m%
      mCARD "Nápověda", "O programu", -%O
      m%=MENU
	  
      PRINT "Volba z menu byla "; m%; " (";CHR$(m%); ")"
      
      IF m%=%v
        stav_velke%=NOT stav_velke%
      ELSEIF m%=%m
        stav_male%=NOT stav_male%
      ENDIF
      
      IF m%=%e : STOP : ENDIF
    ENDIF
  ENDWH
ENDP


Nejčtenější

Tak bude vypadat letošní nejlevnější iPhone, zepředu připomíná desítku

Render chystaného LCD iPhonu s 6,1palcovým panelem ve společnosti menšího...

Uvedení nových iPhonů se blíží, jejich oficiální odhalení proběhne už za dva měsíce. Víme, že budou tři a alespoň z...

Blesková krádež. Zloději za 30 sekund vybílili obchod Applu

Blesková krádež v kalifornském Apple Storu

Skupina mužů za méně než minutu vykradla před očima zákazníků i personálu obchod Apple Store v kalifornském Fresnu....



Tomuto mobilu energie jen tak nedojde. Utrhne vám ovšem kapsu

Ulefone Power 5

Do redakce nám zavítal neobvykle vybavený smartphone značky Ulefone. Velké a těžké monstrum s názvem Power 5 má baterii...

Xiaomi pokračuje v dumpingových akcích. Redmi S2 bude za 300 korun

Nová prodejna mobilů v Olomouci přilákala stovky lidí

Agresivní marketing čínské značky v Česku pokračuje. Xiaomi otevírá třetí obchod a tradičně první den nabízí produkty s...

Recenze: Nokia 8 Sirocco je skutečně luxusní a má skvěle odladěný Android

Nokia 8 Sirocco

Firma HMD Global postupně rozšiřuje svou nabídku smartphonů Nokia i do vyšších pater. Prozatím tou nejlepší nokií,...

Další z rubriky

Na aplikace alternativních taxi útočí virus. Pase po údajích ke kartám

Virus pro Android

Uživatelé mobilních aplikací alternativních taxi včetně aplikace Uber by měli být obezřetní. Ohrožuje je totiž nový...

Už přes ni vyhrožovali smrtí. Přesto je aplikace extrémně populární

Logo aplikace Sarahah

Vysoký nárůst popularity zaznamenala aplikace Sarahah, určená k posílání anonymních zpráv. Ačkoliv se v posledních...

Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel...

Najdete na iDNES.cz