Premium

Získejte všechny články
jen za 89 Kč/měsíc

Úvod do jazyka OPL (7)

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

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Doma si natáhnete neviditelné kabely k internetu. Huawei ukázal inovace

17. dubna 2024

Huawei na každoroční roadshow ukázal v Praze své inovace pro letošní rok. Vedle průmyslových...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Možná s nenápadnou výbavou, ale je to poctivě postavená stylovka

22. dubna 2024

Oppo se v kontextu dalších čínských výrobců prezentuje jako prémiová značka. Rozhodně se nesnaží o...

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Velvyslanectví Thajského království
Political, Cultural and Economic Affairs Assistant

Velvyslanectví Thajského království
Praha
nabízený plat: 34 310 - 39 458 Kč

Manželé Babišovi se rozcházejí, přejí si zachovat rodinnou harmonii

Podnikatel, předseda ANO a bývalý premiér Andrej Babiš (69) s manželkou Monikou (49) v pátek oznámili, že se...

Sexy Sandra Nováková pózovala pro Playboy. Focení schválil manžel

Herečka Sandra Nováková už několikrát při natáčení dokázala, že s odhalováním nemá problém. V minulosti přitom tvrdila,...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...