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

Google posílá vzkaz Evropské komisi. Takhle se bude bránit

Protikartelová komisařka Margrethe Vestagerová.

Google se s obří pokutou od Evropské komise nehodlá smířit. Firma se proti ní odvolá a chce Komisi dokázat, že systém...

Rekordní pokuta pro Google, za dominanci Androidu zaplatí 112 miliard

Ilustrační snímek

Evropská komise uložila internetovému gigantu Google další pokutu. Firma by měla platit za to, že zneužívá dominantního...



Nový supersmartphone vysune kameru a nahrává uživatele bez jeho vědomí

Vivo NEX

V rámci právě skončeného mistrovství světa ve fotbalu byla hrací plocha obklopena panely s reklamami na nový čínský...

Španěl prodává sbírku nerozbalených iPhonů. Za cenu ojetého ferrari

Španěl prodává unikátní sbírku iPhonů za téměř 100 tisíc eur.

Aukční portál eBay je nepřebernou studnicí zajímavých, ale mnohdy i šokujících inzerátů. Nabídku prodejce ze španělské...

Jeden z nejočekávanějších mobilů roku. Nokia 8110 je chytrá jen trochu

Nokia 8110 4G

Retro model Nokia 8110 4G je možná jedním z nejočekávanějších mobilů letošního roku. V Česku se začal prodávat počátkem...

Další z rubriky

Bez reklamy ani ránu. Bude už i na Facebook Messengeru v mobilu

Mobilní Messenger projde změnou, k nelibosti uživatelů v něm budou cílené...

Oblíbený mobilní kecálek se brzy promění. Facebook totiž do Messengeru po úspěšném testování implementuje cílené...

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

Za 23 korun vám aplikace fotku z iPhonu ukáže až za tři dny

Netradiční fotoaplikace Gudak vás donutí nad fotkami zase přemýšlet

Vnímání fotografie se za posledních pár let výrazně změnilo. Díky záznamovým médiím již totiž nemusíme přemýšlet nad...

Najdete na iDNES.cz