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