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ší

Nový „levný“ iPhone má být hit. Prodat se ho má 100 milionů

Trojice iPhonů pro rok 2018

Apple chystá na letošní rok tři nové iPhony. Jedním z nich má být levnější model, který nebude mít OLED displej. A...

Nepoužívejte smartphony Huawei a ZTE, varují Američany FBI, CIA i NSA

Huawei Mate 10 Pro bude v USA k dostání u BestBuy

Huawei chtěl letos vzít útokem Spojené státy, a to s pomocí tamních klíčových operátorů. Z možné dohody však nakonec...



Vodafone extrémně vylepšuje rodinné tarify. Zadarmo přidává 8 GB a VDSL

Vodafone (ilustrační fotografie)

Není obvyklé, aby operátor výrazně vylepšil tarif a nesáhl na cenu. V případě inovovaných rodinných tarifů Red+ tomu...

Teď přijde řada na naše peníze. V Číně totiž končí zlaté časy

Xiaomi Mi 6

Čínský trh s chytrými telefony je největší na světě, ale loni se podle všeho dostal do potíží. Po letech růstu přišel...

Lidé si stěžovali na špatný signál. Rušil ho těžař bitcoinů

(Ilustrační snímek)

Newyorští zákazníci amerického operátora T-Mobile si stěžovali na znatelný šum během telefonních hovorů. Ukázalo se, že...

Další z rubriky

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...

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ý...

Šetří místo i data. Dietní Messenger od Facebooku je i v Česku

Aplikace Facebook Messenger Lite je dostupná i v Česku

Facebook Messenger je jedním z nejpoužívanějších kecálků, ale ne všechny telefony si s ním poradí. Loni se tak zrodila...

Najdete na iDNES.cz