home *** CD-ROM | disk | FTP | other *** search
- A Pascal nyelv rejtelmei (7.)
-
- Üdv mindenkinek, újra együtt vagyunk, és én ennek nagyon örülök.
- Remélem Ti is. Amint múltkor jeleztem, ma a szabványos modulok részletezésébe
- kezdünk. Most valószínûleg csak a CRT unitot tárgyaljuk meg, de amennyire csak
- tudom a lehetô legrészletesebben. Kezdjünk is hozzá.
- Mint a múltkor leírtam a CRT unit a képernyô szöveges üzemmódját
- hivatott támogatni, segítségével tudjuk programjainkat olyanra formálni, hogy az
- valahogy ki is nézzen, de mégsem kelljen a grafika tudományaiba nagyon
- belemélyedni (Ej ráérünk arra még!). Szóval kurzort pozícionálhatunk, színeket
- állíthatunk be, sôt, még hangot is generálhatunk.
-
- - Mi is az a szöveges üzemmód?
- - A számítógép a képernyôt alapértelmezés szerint szöveges módban
- használja. Ez azt jelenti, hogy a matekfüzethez hasonlóan a képernyôt is ilyen
- négyzethálóhoz lehet hasonlítani, sorokból és oszlopokból áll. Az alapértelmezés a
- 80x25, ami annyit takar, hogy 80 oszlop, 25 sor, 80 karaktert írhatunk egy sorba,
- amibôl összesen 25 fér el egy képernyôre. Egy gyors számolás fut végig mindenki
- agyában (Ha mégsem, akkor valami baj van. Fordulj orvoshoz!), ami szerint egy
- képernyôre összesen 2000 karakter fér (ez csak amolyan megjegyzés). Szóval 80
- karakter fér el egy sorban, ha véletlenül mégiscsak többet akarnánk kiírni, a 80
- felettiek átkerülnek a következô sorba. Ez nem olyan nagy gond, mert megmarad,
- viszont ha 25 sornál akarunk többet kiíratni, akkor vigyáznunk kell, mert a
- képernyô tetején kiszaladnak a képernyôbôl a felsô sorok, és a tartalmuk elvész.
- Amint említettem a 80x25 az alapértelmezés, vagyis ez a leggyakoribb, a
- legelterjedtebb. Mivel régebben nem voltak VGA monitorok - meg most sincs
- mindenhol -, más "felbontást" használtak a különbözô típusokon. A CRT unit
- lehetôséget nyújt ezen "felbontások" használatára is. Ezeket majd késôbb
- ismertetem.
-
- Most már tudjátok - ha eddig nem tudtátok -, hogy mi az a szöveges
- üzemmód. Végre nekiláthatunk a CRT unit tárgyalásának. Mint minden rendes
- Pascal program, a modulok is tartalmaznak változókat, konstansokat, eljárásokat és
- függvényeket. Igy van ez a mi esetünkben is, tehát végig vesszük a CRT unit
- felépítését a változóktól a függvényekig.
- Elôször is emlékeztetlek benneteket, hogy hogyan is hivatkozhatunk a
- CRT unitunkra:
-
- uses Crt;
-
- Aki elfelejtette, azzal nem tudom mit csinálok, eszerint hiába veszôdtem órákat az
- elôzô cikkemmel. Na mindegy.
-
- Menjünk sorjában:
-
- - Szöveges mód változói:
- Ezek a változók alapértelmezés szerint rendelkeznek egy értékkel. Ha mi ettôl az
- értéktôl eltérôt szeretnénk használni, akkor ezt nyugodtan megtehetjük úgy, hogy a
- változónak megadjuk az általunk használni kí1vánt értéket. Ezek a változók a
- következôk:
-
- var CheckBreak,
- CheckEof,
- DirectVideo,
- CheckSnow : Boolean;
- LastMode,
- WindMin,
- WindMax : Word;
- TextAttr : Byte;
-
- A CheckBreak szabályozza a program Ctrl-Breakkel történô megszakítását. Ha a
- változó értéke true, a program megszakítható, false esetén nem. Az alapértelmezés
- true.
- A CheckEof engedélyezi vagy nem engedélyezi a Ctrl-Z hatására az end-of-file jel
- írását. Ha a változó értéke true, akkor a képernyôhöz rendelt fájlból való olvasáskor
- a Ctr-Z leütésére fájl vége esemény generálódik, ha értéke false, akkor nem. Az
- alapértelmezés false.
- A CheckSnow változó az ún. havazás jelenséget szabályozza a CGA monitoroknál.
- Ez a havazás nem jelentkezik a monokróm, az EGA és a VGA monitorok esetében.
- Alapértelmezés szerint truera van állítva. Ha nem CGA monitoron futtatunk a
- TextMode (errôl majd késôbb) állítása után érdemes a változót falsera állítani,
- mert jelentôsen gyorsabb outputot eredményez. A havazás nem hatásos, ha a
- DirectVideo értéke false.
- A DirectVideo változó true értéke biztosítja a Write és WriteLn eljárásoknak a
- képernyôhöz való közvetlen hozzáférést oly módon, hogy az output közvetlenül a
- képernyô-memóriába történik. A képernyôkezelés így gyorsabb, mint a BIOS-on
- keresztül. A változó alapértelmezés szerint truera van állítva. Falsera állítjuk
- akkor, ha a BIOS-on keresztül akarjuk a karakterek megjelenítését. Az értékadás
- csak a TextMode hívása után lehetséges.
- A LastMode változó tartalmazza az utoljára kiválasztott szöveges módot. A
- rendszer a program indulásakor az aktív videomód kódját tölti be a változóba.
- A TextAttr tárolja az aktuálisan kiválasztott szövegszínt, amelyet a TextColor és a
- TextBackGround segítségével állítottunk be. Ezt a változót közvetlenül is
- beállíthatjuk némi kis számolgatás után. A bájt tartalma a következô:
-
- 2^7 bit 2^6 2^5 2^4 2^3 2^2 2^1 2^0
- 128 4 2 1 8 4 2 1
- villogás háttérszín aktuális szín
- 0-1 0 - 7 0 - 15
-
- A WindMin és a WindMax változók az aktuális ablak képernyô-koordinátáit
- tárolják. Az értéküket akkor veszik fel, amikor a Window (errôl is késôbb) eljárást
- meghívjuk. A WindMin az ablak bal felsô, a WindMax az ablak jobb alsó
- koordinátáit tartalmazza. Az X-koordináta az alsó bájtban, az Y-koordináta a felsô
- bájtban kerül tárolásra.
-
- - Szöveges mód konstansai
- A TextMode eljárás paramétere az alábbi konstansokat fogadja:
- const
- BW40 = 0; { 40x25 fekete-fehér
- }
- CO40 = 1; { 40x25 színes
- }
- BW80 = 2; { 80x25 fekete-fehér
- }
- CO80 = 3; { 80x25 színes
- }
- Mono = 7; { 80x25 monokróm MDA vagy
- Hercules monitoron }
- Font8x8 = 256; { 40x43, 40x50 sor EGA és VGA
- monitorokon }
- A TextMode aktiválásával állíthatunk fekete-fehér, illetve színes üzemmódot a
- megfelelô ablakmérettel. Például:
-
- TextMode(0); fekete-fehér, 40x25
- TextMode(BW80); fekete-fehér, 80x25
- TextMode(3); színes, 80x25
-
- A szöveg színét a TextColor, a háttér színét a TextBackGround eljárással
- állíthatjuk be. A színkonstansok:
- const
- Black = 0; { fekete }
- Blue = 1; { kék }
- Green = 2; { zöld }
- Cyan = 3; { türkiz }
- Red = 4; { piros }
- Magenta = 5; { lila }
- Brown = 6; { barna }
- LightGray = 7; { világosszürke }
- DarkGray = 8; { sötétszürke }
- LightBlue = 9; { világoskék }
- LightGreen = 10; { világoszöld }
- LightCyan = 11; { világos türkiz }
- LightRed = 12; { világospiros }
- LightMagenta = 13; { világoslila }
- Yellow = 14; { sárga }
- White = 15; { fehér }
- Blink = 128; { villog }
- A színekbôl a szöveg írására mindegyiket (0-15), a háttérre azonban csak az elsô
- nyolcat (0-7) használhatjuk. Például legyen a háttér színe kék, a szöveg színe
- világos türkiz (használhatunk egyaránt szín- vagy számkonstansot):
-
- TextBackGround(1); vagy TextBackGround(Blue);
- TextColor(11); vagy TextColor(LightCyan);
-
- - Szöveges mód eljárásai és függvényei
- Ezeket az eljárásokat és függvényeket öt csoportba oszthatjuk:
- - szöveg kiírása és kezelése,
- - ablak és mód vezérlése,
- - tulajdonság beállítása,
- - állapotlekérdezés,
- - hangkeltés.
- Most nézzük ezeket a csoportokat részletesebben:
-
- - Szöveg kiírása és kezelése
- - írás és olvasás:
-
- AssignCrt(var f: Text);
- A képernyôhöz egy szövegfájlt rendel, amelyet a fájlkezelésnél ismertetett módon
- használhatunk.
-
- Write;
- Aki nem tudja mire jó, az magára vessen. Nézze meg az elsô számban.
-
- Read;
- Szintén!
-
- ReadKey;
- Egy karakter leütésére váró függvény.
- Ch:=ReadKey;
-
- KeyPressed;
- Egy logikai függvény, mely igaz értékkel tér vissza, ha billentyûzeten
- megnyomtunk egy billentyût, egyébként értéke hamis. Nagyon jól használható
- olyan eseteknél, amikor egy billentyû lenyomására meg kell szakítanunk a
- programot.
- repeat
- until KeyPressed;
-
- - szöveg és kurzor mozgatása a képernyôn:
-
- ClrScr;
- Törli az aktuális ablakot (képernyôt), és a kurzort a bal felsô sarokba (1,1) helyezi.
- Az ablak háttere az elôzôekben definiált háttérszínt veszi fel.
-
- ClrEol;
- A sor kurzortól jobbra esô részét törli, és az elôre definiált háttérszínt veszi fel.
-
- DelLine;
- Törli a kurzort tartalmazó sort, és az alatta lévô sorok eggyel feljebb csúsznak. A
- képernyô utolsó sora üres lesz.
-
- GotoXY(x, y: Byte);
- A kurzort az x, y koordinátákra pozícionálja. Az aktuális ablak x-edik oszlopába és
- y-odik sorába helyezi a kurzort. Ezek relatív koordináták, vagyis az aktuális ablak
- bal felsô sarkától számítandók. Érvénytelen koordináták esetén nem kerül
- végrehajtásra.
-
- InsLine;
- Beszúr egy üres sort a kurzort tartalmazó sor alá. Az utolsó sor kicsúszik a
- képernyôbôl.
-
- - Ablak és mód vezérlése
-
- TextMode(Mode: Word);
- A kívánt szöveges üzemmódot választhatjuk ki. A konstansokat lásd fent.
-
- Window(x1, y1, x2, y2: Byte);
- A szöveges képernyôn egy ablakot definiál. Az x1, y1 az ablak bal felsô
- sarokpontjának, az x2, y2 az ablak jobb alsó sarokpontjának koordinátái.
-
- - Tulajdonságok beállítása
-
- TextColor(Color: Byte);
- TextBackGround(Color: Byte);
- Az elôtér és a háttér színeinek beállítása. A konstansokat lásd fent.
-
- HighVideo;
- Magas intenzitás beállítása.
-
- LowVideo;
- Alacsony intenzitás beállítása.
-
- NormVideo;
- Eredeti, normál intenzitás beállítása.
-
- - Ållapotlekérdezés
-
- WhereX;
- A függvény a kurzor x koordinátaértékével tér vissza, melynek értéke bájt típusú.
-
- WhereY;
- A függvény a kurzor y koordinátaértékével tér vissza, melynek értéke bájt típusú.
-
- - Hangkeltés
-
- Sound(Hz: Word);
- Adott Hertz frekvenciájú hangot generál a belsô hangszórón (Internal PC Speaker).
-
- Delay(ms: Word);
- Adott számú ezredmásodpercig felfüggeszti a program futását. Ezzel tudjuk
- szabályozni, a programot, hogy mennyi ideig tartsa a megadott hangot.
-
- NoSound;
- Kikapcsolja a belsô hangszórót.
-
-
- Körülbelül ennyi lenne. Jó programozgatást kívánok!
-
- Domján Tamás
- eMail: PC-XUser@IDG.HU, Subject: "Pascal rovat"
- DomTom@LUDENS.ELTE.HU