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


Úvod do jazyka OPL (7)

aktualizováno 
V už obvyklém úterním dni pokračujeme v pokročilejším programování v OPL.

Změna písma a stylu zobrazeného textu

FONT pismo&, styl%

Pokud chceme změnit písmo, kterým příkazy PRINT zobrazují text, tak použijeme příkaz FONT. Za příkazem FONT následují dvě čísla: první z nich udává typ písma (řez a velikost) a druhé styl (podtržené písmo, kurzíva apod.). Konstanty pro typ písma mají jména KFont...& a pro jejich úplný seznam se podívejte do souboru CONST.OPH.

INCLUDE "Const.oph"

PROC hlavni:
  zkus:(KFontCourierNormal8&, "KFontCourierNormal8&")
  zkus:(KFontCourierNormal11&, "KFontCourierNormal11&")
  zkus:(KFontCourierNormal13&, "KFontCourierNormal13&")
  zkus:(KFontCourierNormal15&, "KFontCourierNormal15&")
  zkus:(KFontCourierBold8&, "KFontCourierBold8&")
  zkus:(KFontCourierBold11&, "KFontCourierBold11&")
  zkus:(KFontCourierBold13&, "KFontCourierBold13&")
ENDP

PROC zkus:(pismo&, jmeno$)
  LOCAL k%, j$(100)
  j$="změňte tento text..."
  FONT pismo&, 0
  CLS
  PRINT "Písmo " ; jmeno$ ; " (=" ; HEX$(pismo&) ; ")"
  PRINT "Text: "; : EDIT j$
  WHILE k%<16
    AT k%+1, k%+1 : PRINT CHR$(%A+k%)
    k%=k%+1
  ENDWH
  GET
ENDP

Prohlédnete-li si soubor CONST.OPH, najdete mnohem více typů písem, než je uvedeno v předcházejícím příkladu. Pro použití s příkazy PRINT, AT, EDIT a INPUT je však doporučeno používat pouze písma s pevnou šířkou (typ KFontCourier...&). Použijeme-li proporcionální řezy písma (Times, Arial), bude pozice znaků na displeji (po AT nebo při editaci textu) dopočítávána špatně. Druhý parametr příkazu FONT určuje zobrazení písma, které je podobné jako parametr příkazu STYLE v následujícím odstavci (hodnoty 1 pro tučné a 8 pro dvojnásobně vysoké písmo lze nastavit jen příkazem FONT).

STYLE styl%

Za příkazem STYLE následuje číslo upřesňující zobrazení písma (2 podtržené, 4 inverzní, 32 kurzíva - možné jsou i kombinace těchto hodnot). Konstanty pro zobrazení písma jsou definovány v souboru CONST.OPH a mají tvar KgStyle...%. Příkaz STYLE nemění šířku znaků a je možné jej používat i pro zvýraznění znaků na jednom řádku jako v následujícím příkladu.

INCLUDE "Const.oph"

PROC styly:
  LOCAL j$(40)
  FONT KFontCourierNormal13&, 0
  PRINT "Toto je " ; :  STYLE KgStyleUnder% : PRINT "důležité" ;
  STYLE 0 : PRINT " a toto je " ; : STYLE KgStyleItalic% : PRINT "poznámka" 
  PRINT
  STYLE KgStyleInverse% : PRINT "Zadej text:" ;
  STYLE 0 : INPUT j$
ENDP
SCREENINFO pole%()

Výšku a šířku obrazovky ve znacích můžeme určit buď zkusmo, nebo v programu příkazem SCREENINFO. Parametrem příkazu je pole celých čísel mající alespoň 10 prvků. Po volání příkazu SCREENINFO je v třetím prvku pole uložen počet znaků na řádek a ve čtvrtém prvku výška displeje ve znacích. Konstanty KSinfo...% v souboru CONST.OPH pojmenovávají jednotlivé indexy prvků tohoto pole.

INCLUDE "Const.oph"

PROC ramecek:
  LOCAL w%, h%, i%(10), j%, m$(6), n$(1)
  m$="++++-!" : REM -- Znaky ramecku --
  FONT KFontCourierNormal18&, KgStyleBold%
  SCREENINFO i%()
  w%=i%(KSinfoAScrW%) : h%=i%(KSinfoAScrH%)
  AT 1, 1 : PRINT MID$(m$, 1, 1);
  AT w%, 1 : PRINT MID$(m$, 2, 1);
  AT 1, h% : PRINT MID$(m$, 3, 1);
  AT w%, h% : PRINT MID$(m$, 4, 1);
  AT 2, 1 : PRINT REPT$(MID$(m$, 5, 1), w%-2);
  AT 2, h% : PRINT REPT$(MID$(m$, 5, 1), w%-2);
  j%=2 : n$ = MID$(m$, 6, 1)
  WHILE j%<h%
    AT 1, j% : PRINT n$; : AT w%, j% : PRINT n$;
    j%=j%+1
  ENDWH
  GET
ENDP

Pro význam ostatních prvků pole vyplněného příkazem SCREENINFO se podívejte do originální dokumentace. Pomocí změny velikosti písma a zjištění počtu znaků, které se vejdou na displej, můžeme i ty nejjednodušší programy obohatit o funkci zvětšení nebo zmenšení písma - stačí si uvědomit, že dotkneme-li se perem tlačítek na levé straně displeje, tak je to považováno za stisk klávesy a funkce GET vrátí příslušnou hodnotu (10003 nebo 10004). Příkladem může být následující program, který zobrazuje tabulku náhodných čísel ve dvou velikostech písma.

INCLUDE "Const.oph"

PROC hlavni:
  LOCAL k%, pocet%, pismo&
  pocet%=5 : pismo&=KFontCourierNormal18&
  DO
    tabulka:(pismo&, pocet%)
    k%=GET
    IF k%=10003
      pismo&=KFontCourierNormal18&
    ELSEIF k%=10004
      pismo&=KFontCourierNormal13&
    ELSEIF k%>%0 AND k%<%9
      pocet% = k% - %0
    ENDIF    
  UNTIL k%=KKeyEsc%
ENDP

PROC tabulka:(pismo&, delka%)
  LOCAL w%, h%, i%(10), j%, p%
  CLS : FONT pismo&, KgStyleInverse%
  SCREENINFO i%()
  w%=i%(KSinfoAScrW%) : h%=i%(KSinfoAScrH%)
  AT 1,1 : PRINT REPT$(" ", w%)
  AT 10,1 : PRINT "* TABULKA NÁHODNÝCH ČÍSEL *"
  AT 1,h% : PRINT REPT$(" ", w%)
  AT 1,h% : PRINT "Zvolte počet číslic, <ESC> pro konec..."
  STYLE 0
  j%=2
  WHILE j%<h%
    p%=2 
    WHILE (p%+delka%)<=w%
      AT p%, j% : PRINT nahoda$:(delka%)
      p%=p%+delka%+1
    ENDWH
    j%=j%+1
  ENDWH
ENDP

PROC nahoda$:(d%)
  LOCAL v$(10)
  WHILE LEN(v$)<d%
    v$=v$+CHR$(INT(RND*10) + %0)
  ENDWH
  RETURN v$
ENDP

Chcete-li zjistit, jaké hodnoty vrací funkce GET po stisknutí dalších systémových kláves (Fn, Help), můžete se podívat do přílohy anglického manuálu k jazyku OPL, do souboru CONST.OPH nebo to prostě vyzkoušet.

Program pracuje, nerušit

BUSY text$
BUSY text$, roh%
BUSY text$, roh%, pauza%
BUSY OFF

Pokud náš program provádí dlouhé výpočty, měl by to dát uživateli na vědomí. Jinak se může stát, že když se program kvůli výpočtu odmlčí, uživatel to bude považovat za chybu (například program běžící v nekonečné smyčce) a bude se jej pokoušet neodborně zastavit. Příkazem BUSY zobrazíme standardní upozornění na probíhající činnost programu vlevo dole na displeji.

Toto upozornění bude na displeji blikat tak dlouho, dokud program nenarazí na příkaz BUSY OFF. Upozornění může být dlouhé nejvýše 80 znaků. Příkaz BUSY má další dva nepovinné parametry. Prvním udáváme, ve kterém rohu se má zpráva objevit (můžeme uvést konstantu ze soboru CONST.OPH, například KBusyTopLeft%). Druhý parametr udává zpoždění v polovinách sekundy. Upozornění se na displeji objeví až po uplynutí tohoto intervalu - pouze tehdy, bude-li výpočet probíhající mezi BUSY a BUSY OFF delší než tento interval.

INCLUDE "Const.oph"

PROC dlouha:
  LOCAL s, a%, d%
  PRINT "Zadejte číslo od 1 do 30 :" ;
  INPUT d%
  BUSY "Nerušit...", KBusyBottomRight%, 2
  a%=1 : WHILE a%<EXP(d%) : s=s+a% : a%=a%+1 : ENDWH
  BUSY OFF
  PRINT "Součet je ", s
  GET
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...



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

Vše, co od smartphonu očekáváte, jen za 6 000. Test Honor 9 Lite

Honor 9 Lite

Honor 9 Lite je žhavou novinkou na českém trhu a také je potenciálním prodejním hitem. Smartphone s moderními funkcemi...

Další z rubriky

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

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

Záchranku volejte přes aplikaci. Pomoc je rychlejší než při volání na 155

Simulovaná dopravní nehoda jako praktická ukázka fungování mobilní aplikace...

„Záchranná služba, tísňová linka, dobrý den,“ ohlašuje se operátorka volajícímu, který se stal svědkem dopravní nehody....

Akční letáky
Akční letáky

Všechny akční letáky na jednom místě!



Najdete na iDNES.cz