Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 192x
Free Pascal - Úvod - 65 877x
Lazarus - Kreslenie - 47 455x
Free Pascal - Začiatky - 44 741x
Free Pascal - Podmienky - 37 097x
Free Pascal - Cykly - 36 348x
Internetové prehliadače - 36 214x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Programovanie > Free Pascal - Jednotka CRT

Free Pascal - Jednotka CRT

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.

Použitie

Predtým, ako jednotku CRT použijeme, musíme ju zahrnúť medzi použité:

program ukazka;
uses
 crt;
begin
 ...
end.

Farby

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
 

Textový kurzor

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.

Vymazávanie znakov

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

Riadky

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.

Klávesnica

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;

Zdržanie programu o určitý čas

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;

Jednoduchý zvuk

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.
Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 2,63
Diskusia k tejto stránke Ak píšeš text cez writeln, vo Windows sa vpravo zo...
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0384 s. Valid XHTML, CSS.