Jednotka (Unit) CRT je súbor konštánt, procedúr a funkcií, ktoré umožňujú pracovať s obrazovkou a klávesnicou, čiastočne i so zvukom a časom. Používa sa takmer v každom konzolovom programe napísanom v Pascale.
Predtým, ako jednotku CRT použijeme, musíme ju zahrnúť medzi použité:
program ukazka; uses crt; begin ... end.
Farbu textu nastavíme procedúrou TextColor
, farbu pozadia cez TextBackground
. Zadané farby sa použijú až pri kreslení ďalšieho znaku. Procedúrou NormVideo
nastavíme pôvodné vlastnosti.
program farby; uses crt; begin writeln('Normalny text.'); TextColor(Yellow); writeln('Zlty text na ciernom pozadi.'); TextBackground(2); {2 = Green} write('Zlty text na zelenom pozadi.'); NormVideo; {predvolene nastavenia} writeln(' Zas je vsetko po starom.'); end.
Parametrom spomínaných procedúr je číslo, no existujú i preddefinované konštanty. Niektoré sa dajú použiť iba ako farba písma, iné aj ako farba pozadia.
Farby pre pozadie aj text | ||
---|---|---|
názov konštanty | hodnota | ukážka |
Black | 0 | |
Blue | 1 | |
Green | 2 | |
Cyan | 3 | |
Red | 4 | |
Magenta | 5 | |
Brown | 6 | |
LightGray | 7 | |
Farby len pre text | ||
názov konštanty | hodnota | ukážka |
DarkGray | 8 | |
LightBlue | 9 | |
LightGreen | 10 | |
LightCyan | 11 | |
LightRed | 12 | |
LightMagenta | 13 | |
Yellow | 14 | |
White | 15 |
V textovom režime sa obrazovka skladá zo znakov - zvyčajne 80 na šírku a 25 na výšku. Kurzor je miesto, kde sa po zavolaní procedúry write
(a podobných) vypíše text. Toto miesto je znázornené blikajúcou čiarou v spodnej časti znaku.
Na presun textového kurzora sa používa procedúra GoToXY
. Má dva parametre, prvý je súradnica X a druhý Y. Začiatok súradnicovej sústavy (X = 1, Y = 1) je v ľavom hornom rohu obrazovky.
Ak chceme zistiť aktuálne súradnice kurzora, môžeme použiť funkcie WhereX
a WhereY
.
ClrScr; {zmazanie obrazovky} GoToXY(10, 3); writeln('Tento text sa zacina na [10, 3]'); write('Kurzor bol medzitym presunuty na: [', WhereX, ', ', WhereY, ']');
Napíšeme si jednoduchý program. Bude obsahovať procedúru, ktorá presunie kurzor tak, že navzájom prehodí x-ovú a y-ovú súradnicu.
program suradn; uses crt; procedure PrehodXY; begin GoToXY(WhereY, WhereX); end; begin ClrScr; GoToXY(8, 2); PrehodXY; {suradnice su teraz [2, 8]} end.
Procedúra ClrScr
vymaže všetky znaky na obrazovke a vráti kurzor na jej začiatok. Ak potrebujeme zmazať len znaky od aktuálnej pozície kurzora do konca riadku, použijeme procedúru ClrEol
.
Je nutné poznamenať, že vymazaním určitej plochy nadobudne táto plocha aktuálnu farbu pozadia (nastavenú cez TextBackground
).
Procedúra InsLine
vloží nový riadok na miesto, kde sa nachádza kurzor. Všetky riadky, ktoré sú pod úrovňou kurzora, sa posunú o riadok nižšie.
ClrScr; writeln('Riadok 1'); write('Riadok 2'); GoToXY(1, 1); InsLine; write('Vlozeny riadok');
Na zmazanie aktuálneho riadku slúži DelLine
. Všetky riadky pod aktuálnym sa posunú smerom hore.
Podobne ako pri procedúrach na mazanie, aj tu sa vymazávané znaky vykreslia aktuálnou farbou pozadia.
Ak chceme získať od užívateľa vstup z klávesnice a nehodí sa nám procedúra readln
, môžeme použiť funkciu ReadKey
. Tá čaká na stlačenie klávesu a vráti hodnotu znaku (typu char
). Znak sa pritom nevypíše na obrazovku automaticky.
Ak bolo stlačený alfanumerický kláves, vrátenú hodnotu môžeme hneď vypísať alebo ju porovnať s iným znakom. Pokiaľ však užívateľ stlačil špeciálny kláves, funkcia najprv vráti hodnotu 0. Až po jej druhom zavolaní sa dozvieme kód klávesu.
program klav; uses crt; var hodnota: char; begin writeln('Stlacte klaves.'); hodnota := ReadKey; if hodnota <> #0 then writeln(hodnota) else writeln('Bol stlaceny specialny', ' klaves. Kod: ', ord(ReadKey)); end.
K príkladu: #0 je znaková konštanta (char
) s hodnotou 0. Funkcia ord
vráti číselnú reprezentáciu (ASCII kód) znaku, v našom prípade kód klávesu. Tu je prehľad niektorých kódov špeciálnych klávesov:
kláves | kód |
---|---|
šípka doľava | 75 |
hore | 72 |
dole | 80 |
doprava | 77 |
Insert | 82 |
Delete | 83 |
Home | 71 |
End | 79 |
Page Up | 73 |
Page Down | 81 |
F1 až F10 | 59 až 68 |
F11 | 133 |
F12 | 134 |
Kláves Escape síce nie je alfanumerický, no nevráti najprv hodnotu 0, ale hneď svoj číselný kód. Ten je rovný 27.
Ďalší príklad:
writeln('Stlacte sipku dolava.'); while ReadKey <> #0 do while ReadKey <> #75 do ;
Funkcia KeyPressed
vráti true
, ak bol stlačený ľubovoľný kláves.
writeln('Stlacte lubovolny klaves', ' pre ukoncenie programu.'); repeat until KeyPressed;
Ak chceme program pozastaviť na určitý čas, použijeme procedúru Delay
. Parametrom je počet milisekúnd, ktoré má aplikácia stráviť nečinnosťou.
for i := 1 to 20 do begin writeln('.'); Delay(200); end;
Najjednoduchšie zvukové zariadenie, ktoré sa nachádza prakticky v každom počítači, je tzv. interný PC speaker. Dokáže vydávať zvuk určitej frekvencie. Čím je frekvencia väčšia, tým je zvuk vyšší.
Zavolaním procedúry Sound
s parametrom udávajúcim frekvenciu v Hz sa začne vydávať zvuk. Budeme ho počuť až do ukončenia programu alebo do zavolania procedúry NoSound
. Tu je praktická ukážka:
Sound(4000); {zacni vydavat zvuk s frekvenciou 4000 Hz} Delay(2000); {pockaj 2 sekundy} NoSound; {prestan vyludzovat to hrozne pipanie}
Asi sklamem používateľov Free Pascalu, ale procedúry Sound
a NoSound
v ňom nie sú podporované. Interný PC speaker je totiž veľmi zastaralý spôsob komunikácie s užívateľom.
Pre užívateľov TurboPascalu tu mám jeden zaujímavý program - test vášho interného speakera, uší a nervov. Neručím za dôsledky.
program zv_test; uses crt; var i: integer; begin i := 20; while i < 18000 do begin Sound(i); Delay(20); NoSound; Inc(i, 15); end; end.