home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1998 March / pcx19_9803.iso / PC-XUSER / PC-XUSER.10 / PASCAL / PASCAL10.TXT < prev   
Encoding:
Text File  |  1997-10-17  |  9.7 KB  |  252 lines

  1. A Pascal nyelv rejtelmei (7.)
  2.  
  3.   Üdv mindenkinek, újra együtt vagyunk, és én ennek nagyon örülök.
  4. Remélem Ti is. Amint múltkor jeleztem, ma a szabványos modulok részletezésébe
  5. kezdünk. Most valószínûleg csak a CRT unitot tárgyaljuk meg, de amennyire csak
  6. tudom a lehetô legrészletesebben. Kezdjünk is hozzá.
  7.     Mint a múltkor leírtam a CRT unit a képernyô szöveges üzemmódját
  8. hivatott támogatni, segítségével tudjuk programjainkat olyanra formálni, hogy az
  9. valahogy ki is nézzen, de mégsem kelljen a grafika tudományaiba nagyon
  10. belemélyedni (Ej ráérünk arra még!). Szóval kurzort pozícionálhatunk, színeket
  11. állíthatunk be, sôt, még hangot is generálhatunk.
  12.  
  13.  - Mi is az a szöveges üzemmód?
  14.  - A számítógép a képernyôt alapértelmezés szerint szöveges módban
  15. használja. Ez azt jelenti, hogy a matekfüzethez hasonlóan a képernyôt is ilyen
  16. négyzethálóhoz lehet hasonlítani, sorokból és oszlopokból áll. Az alapértelmezés a 
  17. 80x25, ami annyit takar, hogy 80 oszlop, 25 sor, 80 karaktert írhatunk egy sorba, 
  18. amibôl összesen 25 fér el egy képernyôre. Egy gyors számolás fut végig mindenki 
  19. agyában (Ha mégsem, akkor valami baj van. Fordulj orvoshoz!), ami szerint egy 
  20. képernyôre összesen 2000 karakter fér (ez csak amolyan megjegyzés). Szóval 80 
  21. karakter fér el egy sorban, ha véletlenül mégiscsak többet akarnánk kiírni, a 80 
  22. felettiek átkerülnek a következô sorba. Ez nem olyan nagy gond, mert megmarad, 
  23. viszont ha 25 sornál akarunk többet kiíratni, akkor vigyáznunk kell, mert a 
  24. képernyô tetején kiszaladnak a képernyôbôl a felsô sorok, és a tartalmuk elvész.
  25. Amint említettem a 80x25 az alapértelmezés, vagyis ez a leggyakoribb, a 
  26. legelterjedtebb. Mivel régebben nem voltak VGA monitorok - meg most sincs 
  27. mindenhol -, más "felbontást" használtak a különbözô típusokon. A CRT unit 
  28. lehetôséget nyújt ezen "felbontások" használatára is. Ezeket majd késôbb 
  29. ismertetem.
  30.  
  31.     Most már tudjátok - ha eddig nem tudtátok -, hogy mi az a szöveges 
  32. üzemmód. Végre nekiláthatunk a CRT unit tárgyalásának. Mint minden rendes 
  33. Pascal program, a modulok is tartalmaznak változókat, konstansokat, eljárásokat és 
  34. függvényeket. Igy van ez a mi esetünkben is, tehát végig vesszük a CRT unit 
  35. felépítését a változóktól a függvényekig.
  36.     Elôször is emlékeztetlek benneteket, hogy hogyan is hivatkozhatunk a 
  37. CRT unitunkra:
  38.  
  39.     uses Crt;
  40.  
  41. Aki elfelejtette, azzal nem tudom mit csinálok, eszerint hiába veszôdtem órákat az 
  42. elôzô cikkemmel. Na mindegy.
  43.  
  44.     Menjünk sorjában:
  45.  
  46.     - Szöveges mód változói:
  47. Ezek a változók alapértelmezés szerint rendelkeznek egy értékkel. Ha mi ettôl az 
  48. értéktôl eltérôt szeretnénk használni, akkor ezt nyugodtan megtehetjük úgy, hogy a 
  49. változónak megadjuk az általunk használni kí1vánt értéket. Ezek a változók a 
  50. következôk:
  51.  
  52.     var CheckBreak,
  53.         CheckEof,
  54.         DirectVideo,
  55.         CheckSnow  : Boolean;
  56.         LastMode,
  57.         WindMin,
  58.         WindMax    : Word;
  59.         TextAttr   : Byte;
  60.  
  61. A CheckBreak szabályozza a program Ctrl-Breakkel történô megszakítását. Ha a 
  62. változó értéke true, a program megszakítható, false esetén nem. Az alapértelmezés 
  63. true.
  64. A CheckEof engedélyezi vagy nem engedélyezi a Ctrl-Z hatására az end-of-file jel 
  65. írását. Ha a változó értéke true, akkor a képernyôhöz rendelt fájlból való olvasáskor 
  66. a Ctr-Z leütésére fájl vége esemény generálódik, ha értéke false, akkor nem. Az 
  67. alapértelmezés false.
  68. A CheckSnow változó az ún. havazás jelenséget szabályozza a CGA monitoroknál. 
  69. Ez a havazás nem jelentkezik a monokróm, az EGA és a VGA monitorok esetében. 
  70. Alapértelmezés szerint truera van állítva. Ha nem CGA monitoron futtatunk a 
  71. TextMode (errôl majd késôbb) állítása után érdemes a változót falsera állítani, 
  72. mert jelentôsen gyorsabb outputot eredményez. A havazás nem hatásos, ha a 
  73. DirectVideo értéke false.
  74. A DirectVideo változó true értéke biztosítja a Write és WriteLn eljárásoknak a 
  75. képernyôhöz való közvetlen hozzáférést oly módon, hogy az output közvetlenül a
  76. képernyô-memóriába történik. A képernyôkezelés így gyorsabb, mint a BIOS-on 
  77. keresztül. A változó alapértelmezés szerint truera van állítva. Falsera állítjuk 
  78. akkor, ha a BIOS-on keresztül akarjuk a karakterek megjelenítését. Az értékadás 
  79. csak a TextMode hívása után lehetséges.
  80. A LastMode változó tartalmazza az utoljára kiválasztott szöveges módot. A 
  81. rendszer a program indulásakor az aktív videomód kódját tölti be a változóba.
  82. A TextAttr tárolja az aktuálisan kiválasztott szövegszínt, amelyet a TextColor és a 
  83. TextBackGround segítségével állítottunk be. Ezt a változót közvetlenül is 
  84. beállíthatjuk némi kis számolgatás után. A bájt tartalma a következô:
  85.  
  86.               2^7 bit   2^6 2^5 2^4  2^3 2^2 2^1 2^0
  87.               128       4   2   1     8  4   2   1
  88.               villogás  háttérszín   aktuális szín
  89.                 0-1       0 - 7         0 - 15
  90.  
  91. A  WindMin és a WindMax változók az aktuális ablak képernyô-koordinátáit
  92. tárolják. Az értéküket akkor veszik fel, amikor a Window (errôl is késôbb) eljárást 
  93. meghívjuk. A WindMin az ablak bal felsô, a WindMax az ablak jobb alsó 
  94. koordinátáit tartalmazza. Az X-koordináta az alsó bájtban, az Y-koordináta a felsô 
  95. bájtban kerül tárolásra.
  96.  
  97.     - Szöveges mód konstansai
  98. A TextMode eljárás paramétere az alábbi konstansokat fogadja:
  99.     const
  100.         BW40    = 0;        { 40x25 fekete-fehér        
  101.         }
  102.         CO40    = 1;        { 40x25 színes            
  103.         }
  104.         BW80    = 2;        { 80x25 fekete-fehér        
  105.         }
  106.         CO80    = 3;        { 80x25 színes            
  107.         }
  108.         Mono    = 7;        { 80x25 monokróm MDA vagy 
  109. Hercules monitoron    }
  110.         Font8x8    = 256;        { 40x43, 40x50 sor EGA és VGA 
  111. monitorokon    }
  112. A TextMode aktiválásával állíthatunk fekete-fehér, illetve színes üzemmódot a 
  113. megfelelô ablakmérettel. Például:
  114.  
  115.     TextMode(0);    fekete-fehér, 40x25
  116.     TextMode(BW80);    fekete-fehér, 80x25
  117.     TextMode(3);    színes, 80x25
  118.  
  119. A szöveg színét a TextColor, a háttér színét a TextBackGround eljárással 
  120. állíthatjuk be. A színkonstansok:
  121.     const
  122.         Black        = 0;        { fekete        }
  123.         Blue        = 1;        { kék        }
  124.         Green        = 2;        { zöld        }
  125.         Cyan        = 3;        { türkiz        }
  126.         Red        = 4;        { piros        }
  127.         Magenta        = 5;        { lila        }
  128.         Brown        = 6;        { barna        }
  129.         LightGray    = 7;        { világosszürke    }
  130.         DarkGray    = 8;        { sötétszürke    }
  131.         LightBlue    = 9;        { világoskék    }
  132.         LightGreen    = 10;        { világoszöld    }
  133.         LightCyan    = 11;        { világos türkiz    }
  134.         LightRed    = 12;        { világospiros    }
  135.         LightMagenta    = 13;        { világoslila    }
  136.         Yellow        = 14;        { sárga        }
  137.         White        = 15;        { fehér        }
  138.         Blink        = 128;        { villog        }
  139. A színekbôl a szöveg írására mindegyiket (0-15), a háttérre azonban csak az elsô 
  140. nyolcat (0-7) használhatjuk. Például legyen a háttér színe kék, a szöveg színe 
  141. világos türkiz (használhatunk egyaránt szín- vagy számkonstansot):
  142.  
  143.     TextBackGround(1);   vagy   TextBackGround(Blue);
  144.     TextColor(11);   vagy   TextColor(LightCyan);
  145.  
  146. - Szöveges mód eljárásai és függvényei
  147. Ezeket az eljárásokat és függvényeket öt csoportba oszthatjuk:
  148. - szöveg kiírása és kezelése,
  149. - ablak és mód vezérlése,
  150. - tulajdonság beállítása,
  151. - állapotlekérdezés,
  152. - hangkeltés.
  153. Most nézzük ezeket a csoportokat részletesebben:
  154.  
  155.     - Szöveg kiírása és kezelése
  156. - írás és olvasás:
  157.  
  158.     AssignCrt(var f: Text);
  159. A képernyôhöz egy szövegfájlt rendel, amelyet a fájlkezelésnél ismertetett módon 
  160. használhatunk.
  161.  
  162.     Write;
  163. Aki nem tudja mire jó, az magára vessen. Nézze meg az elsô számban.
  164.  
  165.     Read;
  166. Szintén!
  167.  
  168.     ReadKey;
  169. Egy karakter leütésére váró függvény.
  170.     Ch:=ReadKey;
  171.  
  172.     KeyPressed;
  173. Egy logikai függvény, mely igaz értékkel tér vissza, ha billentyûzeten 
  174. megnyomtunk egy billentyût, egyébként értéke hamis. Nagyon jól használható 
  175. olyan eseteknél, amikor egy billentyû lenyomására meg kell szakítanunk a 
  176. programot.
  177.     repeat
  178.     until KeyPressed;
  179.  
  180. - szöveg és kurzor  mozgatása a képernyôn:
  181.  
  182.     ClrScr;
  183. Törli az aktuális ablakot (képernyôt), és a kurzort a bal felsô sarokba (1,1) helyezi. 
  184. Az ablak háttere az elôzôekben definiált háttérszínt veszi fel.
  185.  
  186.     ClrEol;
  187. A sor kurzortól jobbra esô részét törli, és az elôre definiált háttérszínt veszi fel.
  188.  
  189.     DelLine;
  190. Törli a kurzort tartalmazó sort, és az alatta lévô sorok eggyel feljebb csúsznak. A 
  191. képernyô utolsó sora üres lesz.
  192.  
  193.     GotoXY(x, y: Byte);
  194. A kurzort az x, y koordinátákra pozícionálja. Az aktuális ablak x-edik oszlopába és 
  195. y-odik sorába helyezi a kurzort. Ezek relatív koordináták, vagyis az aktuális ablak 
  196. bal felsô sarkától számítandók. Érvénytelen koordináták esetén nem kerül 
  197. végrehajtásra.
  198.  
  199.     InsLine;
  200. Beszúr egy üres sort a kurzort tartalmazó sor alá. Az utolsó sor kicsúszik a 
  201. képernyôbôl.
  202.  
  203. - Ablak és mód vezérlése
  204.  
  205.     TextMode(Mode: Word);
  206. A kívánt szöveges üzemmódot választhatjuk ki. A konstansokat lásd fent.
  207.  
  208.     Window(x1, y1, x2, y2: Byte);
  209. A szöveges képernyôn egy ablakot definiál. Az x1, y1 az ablak bal felsô 
  210. sarokpontjának, az x2, y2 az ablak jobb alsó sarokpontjának koordinátái.
  211.  
  212. - Tulajdonságok beállítása
  213.  
  214.     TextColor(Color: Byte);
  215.     TextBackGround(Color: Byte);
  216. Az elôtér és a háttér színeinek beállítása. A konstansokat lásd fent.
  217.  
  218.     HighVideo;
  219. Magas intenzitás beállítása.
  220.  
  221.     LowVideo;
  222. Alacsony intenzitás beállítása.
  223.  
  224.     NormVideo;
  225. Eredeti, normál intenzitás beállítása.
  226.  
  227.     - Ållapotlekérdezés
  228.  
  229.     WhereX;
  230. A függvény a kurzor x koordinátaértékével tér vissza, melynek értéke bájt típusú.
  231.  
  232.     WhereY;
  233. A függvény a kurzor y koordinátaértékével tér vissza, melynek értéke bájt típusú.
  234.  
  235. - Hangkeltés
  236.  
  237.     Sound(Hz: Word);
  238. Adott Hertz frekvenciájú hangot generál a belsô hangszórón (Internal PC Speaker).
  239.  
  240.     Delay(ms: Word);
  241. Adott számú ezredmásodpercig felfüggeszti a program futását. Ezzel tudjuk 
  242. szabályozni, a programot, hogy mennyi ideig tartsa a megadott hangot.
  243.  
  244.     NoSound;
  245. Kikapcsolja a belsô hangszórót.
  246.  
  247.  
  248. Körülbelül ennyi lenne. Jó programozgatást kívánok!
  249.  
  250.                                      Domján Tamás
  251.                               eMail: PC-XUser@IDG.HU, Subject: "Pascal rovat"
  252.                                  DomTom@LUDENS.ELTE.HU