Jednotky (unity) Úvod Rozsáhlejší program je typicky rozdělen do několika logických částí, resp. zdrojových souborů (jednotek, unit). Na každém takovém „kousku“ kódu může pracovat jeden člověk, na konci se pak jednotlivé unity pospojují dohromady. Struktura programu v Pascalu program Nazev_programu; uses …, …; {unity, které program používá} const {deklarace konstant} type {deklarace typů} var {deklarace proměnných} {deklarace procedur a funkcí} begin … end.
{tělo programu}
CRT ♦ Procedury a funkce procedure Delay(MS: Word) – čeká zadaný počet milisekund procedure ClrScr – smaže obsah obrazovky procedure GotoXY(X, Y: Byte) – přesune textový kurzor na pozici X, Y (levý horní roh obrazovky má souřadnice 1, 1) function WhereX: Byte – vrací X pozici kurzoru na obrazovce function WhereY: Byte – vrací Y pozici kurzoru na obrazovce procedure TextBackground(Color: Byte) – nastaví barvu pozadí textu (0..7) procedure TextColor(Color: Byte) – nastaví barvu textu (0..15) function KeyPressed: Boolean – vrací true, pokud je stisknuta klávesa na klávesnici function ReadKey: Char – čeká na stisk klávesy, vrátí její kód (stisknutou klávesu nevypisuje na obrazovku) procedure Sound(Hz: Word) – speaker začne vydávat zvuk na dané frekvenci procedure NoSound – vypne speaker procedure HigVideo - vysoká intensita vystupujících znaků procedure NormVideo - normální intensita vystupujících znaků (jako při spuštění programu) procedure LowVideo - nízká intensita vystupujících znaků procedure Window(x1,y1,x2,y2: Byte) – definuje okno. x1,y1 - souřadnice levého horního rohu, x2,y2 - souřadnice pravého dolního rohu. Po umístění kurzoru příkazem GotoXY(1,1) je výstup směrován do tohoto okna. Pokud se chceme vrátit k celé obrazovce, použijeme Window(1,1,80,25). ♦
Konstanty pro barvy Blafl 0 (černá) Blue 1 (modrá) Green 2 (zelená) Kyan 3 (azurová) Red 4 (červená) Agenta 5 (fialová)
Brown 6 (okrová) LightGray 7 (světle šedá) DarkGray 8 (tmavě šedá) LightBlue 9 (světle modrá) LightGreen 10 (světle zelená) LightCyan 11 (světle azurová) LightRed 12 (světle červená) LightMagenta 13 (světle fialová) Yellow 14 (žlutá) White 15 (bílá) Atribut barvy pro blikání, Blink = 128. Tj. TextColor(14) a TextColor(Yellow) znamenají to samé, podobně aby text blikal, je možno napsat TextColor(14+128) nebo TextColor(Yellow+Blink).
GRAPH Jednotka GRAPH obsahuje procedury a funkce pro práci v grafickém režimu. ♦
Inicializace procedure DetectGraph(var driver,mode:integer); Zjištuje typ hardware a použitelný grafický režim. Procedura umí detekovat tyto karty: 1 CGA MCGA 2 3 EGA EGA64 4 5 EGAMono IBM8514 6 HercMono 7 8 ATT400 9 VGA PC3270 10 procedure InitGraph(var karta,rezim:integer;path:string); Aktivuje grafický režim. Je možné použít údaje procedury DetectGraph , nebo proměnné karta přiřadit hodnotu 0 (Detect). Pak se použije mechanizmus autodetekce. Parametr path určuje cestu k souborům ovladačů grafických karet (soubory s příponou "bgi"). function GrahResult:integer; Při aktivaci grafického režimu, nebo při jeho přepínání, je vhodné zjistit úspěšnost operace. Funkce vrací nulu v případě bezchybného stavu. procedure CloseGraph; Ukončení grafického režimu a návrat do textového režimu. function GetGraphMode:integer; Vrací aktuální grafický režim jako číslo 0-5, v závislosti na použitém ovladači. EGA 0 EGALo 640 x 200 x 16 1 EGAHi 640 x 350 x 16 VGA 0 VGALo 640 x 200 x 16 1 VGAMed 640 x 350 x 16 2 VGAHi 640 x 480 x 16 Pozn. Tyto údaje platí pro ovladač EGAVGA.BGI
function GetMaxMode:integer; Vrací číslo nejvyššího možného použitelného grafického režimu pro aktuální ovladač. procedure RestoreCrtMode; Obnoví původní textový režim obrazovky, který byl nastaven před spuštěním grafického režimu. Lze použít k dočasnému přepínání mezi grafickým a textovým režimem. procedure SetGraphMode(rezim:integer); Provádí změnu grafického režimu. Při každém použití smaže obrazovku. Lze též použít k dočasnému přepínání mezi grafickým a textovým režimem. Grafický režim musí být inicializován procedurou InitGraph. procedure ClearDevice; Smaže obrazovku v grafickém režimu a přesune grafický kurzor do levého horního rohu (souřadnice 0,0). ♦
Barvy procedure SetColor(barva:word); Nastaví barvu pera v grafickém režimu. černá 0 Black modrá 1 Blue Green zelená 2 modrozelená 3 Cyan červená 4 Red Magenta fialová 5 Brown hnědá 6 LightGray světle šedá 7 8 DarkGray tmavě šedá LightBlue světle modrá 9 světle zelená 10 LightGreen 11 LightCyan světle modrozelená 12 LightRed světle červená světle fialová 13 LightMagenta žlutá 14 Yellow bílá 15 White function GetColor:word; Vrací aktuálí barvu pera v grafickém režimu. function GetMaxColor:word; Vrací nejvyšší použitelné číslo barvy, v závislosti na použitém ovladači. procedure SetBkColor(barva:word); Nastaví barvu pozadí grafického režimu. function GetBkColor:word; Vrací číslo barvy pozadí grafického režimu. ♦
Souřadnice function GetX:integer; Vrací aktuální vodorovnou souřadnici grafického kurzoru (pera). function GetY:integer; Vrací aktuální svislou souřadnici grafického kurzoru (pera). function GetMaxX:integer; Vrací nejvyšší možnou souřadnici ve vodorovném směru. Závisí na ovladači a režimu. function GetMaxY:integer; Vrací nejvyšší možnou souřadnici ve svislém směru. Závisí na ovladači a režimu. procedure MoveTo(x,y:integer); Přesune grafický kurzor na udanou pozici.
procedure MoveRel(x,y:integer); Přesune grafický kurzor o relativní vzdálenost od současné pozice. ♦
Body procedure PutPixel (x1,y1:integer,barva:word) Nakreslí bod na zadané pozici v dané barvě.
♦
Čáry procedure Line(x1,y1,x2,y2:integer); Nakreslí čáru mezi uvedenými souřadnicemi. procedure LineTo(x,y:integer); Nakreslí čáru z aktuální pozice pera do pozice udané souřadnicemi x a y. procedure LineRel(x,y:integer); Nakreslí čáru z aktuální pozice do relativní vzdálenosti. procedure SetLineStyle(styl,vzorek,sirka:word); Nastaví styl čar grafických obrazců Styl 0 SolidLn 1 DottedLn 2 CenterLn 3 DashedLn UserBitLn 4 Šířka 1 NormWidth 3 ThickWidth Pokud je zvolen styl jiný než UserBitLn bude parametr vzorek ignorován. procedure SetWriteMode(mode:integer); Nastavuje způsob kreslení čar a obrazců. NormalPut 0 XORPut 1 OrPut 2 AndPut 3 NotPut 4 ♦
Pravoúhelníky, mnohoúhelníky procedure Rectangle(x1,y1,x2,y2:integer); Nakreslí pravoúhelník. procedure Bar(x1,y1,x2,y2:integer); Nakreslí vyplněný pravoúhelník. procedure DrawPoly(n:word;var seznam); Nepravidelný mnohoúhelník. Parametr n určuje počet souřadnic v seznamu. Seznam musí obsahovat o jedny souřadnice víc než je počet vrcholů mnohoúhelníku (první a poslední souřadnice jsou identické). var trojúhelnik: array[1..4] of PointType = ((x:50;y:100), (x:100;y:100), (x:150;y:150), (x:50;y:100)); DrawPoly(4,trojúhelnik); procedure FillPoly(n:word;var seznam); Nepravidelný vyplněný mnohoúhelník. ♦
Kruhy, elipsy procedure Circle(x,y:integer;radius:word); Nakreslí kružnici o poloměru radius bodů.
procedure Arc(x,y:integer;st,end,radius:word); Kruhový oblouk, počáteční úhel st , koncový end stupňů a poloměr radius. Úhel nula je vpravo od středu, pokračuje se proti směru hodinových ručiček. procedure PieSlice(x,y:integer;st,end,radius:word); Vyplněná kruhová výseč. procedure Ellipse(x,y:integer;st,end:word;rx,ry:word); Eliptický oblouk, počáteční úhel st , koncový end stupňů, poloměry rx vodorovně a ry svisle. procedure FillEllipse(x,y:integer;rx,ry:word); Vyplněná elipsa, rx vodorovný a ry svislý poloměr. procedure Sector(x,y:integer;st,end:word;rx,ry:word); Vyplněná eliptická výseč. ♦
Výplně procedure SetFillStyle(vzorek,barva:word); Nastaví vzorek a barvu výplně grafických obrazců. 0 EmptyFill 1 SolidFill 2 LineFill 3 LtSlashFill SlashFill 4 BkSlashFill 5 6 LtBkSlashFill HatchFill 7 XHatchFill 8 9 InterleaveFill 10 WideDotFill CloseDotFill 11 UserFill 12 procedure FloodFill(x,y:integer;okraj:word); Vyplní oblast, ohraničenou barvou okraj, aktuální výplní. ♦
Texty procedure OutText(s:string); Zobrazí řetězec na aktuální pozici grafického kurzoru. procedure OutTextXY(x,y:integer;s:string); Zobrazí řetězec na udané pozici. procedure SetTextJustify(vod,sv:word); Nastaví způsob zarovnání textu. Vodorovně 0 LeftText 1 CenterText 2 RightText Svisle 0 BottomText 1 CenterText 2 TopText procedure SetTextStyle(font,dir:word;size:word); Nastaví font písma , směr a velikost zobrazení . Font 0 DefaultFont 1 TriplexFont
2 3 4 Směr 0 1 ♦
SmallFont SansSerifFont GothicFont HorizDir VertDir
Výřezy function ImageSize(x1,y1,x2,y2:integer):word; Vrací počet byte, potřebných pro uložení pravoúhlého výřezu obrazu. procedure GetImage(x1,y1,x2,y2:integer;var p:pointer); Uloží výřez obrazovky do paměti, na místo, kam ukazuje p. Největší možná velikost výřezu je 64 kB. procedure PutImage(x,y:integer;var p:pointer;bit_op:word); Vloží data, předtím uložené procedurou GetImage, z paměti na obrazovku. Parametr bit_op určuje binární operátor způsobu vložení do obrazu. 0 NormalPut 1 XORPut 2 OrPut 3 AndPut 4 NotPut