Všechny tyto jednotky mají vztah ke grafickému výstupu programu. Jednotka Graph tvoří velmi rozsáhlý systém, dnešní lekce bude proto poněkud delší.
Tato jednotka slouží k rychlé a pohodlné obsluze tiskárny. Je velice malá, vlastně jenom deklaruje soubor Lst. Výpis do tohoto souboru znamená tisk na LPT1. (Což využijete jedině na starších počítačích.)
Raději na příkladu :
program TunaPapiru; uses Printer; begin repeat Writeln(Lst,'Tiskneme, tiskneme'); until false; end.
Tato jednotka se využívá pro tvorbu všemožných (i nemožných) textových efektů (blikající barevné písmo, umístění textu na přesné místo obrazovky). Velice usnadňuje práci s klávesnicí a obrazovkou. Některé kompilátory obsahují příkazy jednotky Crt již v jednotce System (tedy jako příkazy, které lze použít kdykoliv.)
Ve své inicializační části tato jednotka inicializuje soubory Input (vstup z klávesnice) a Output (výstup na obrazovce).
Klasická jednotka Crt má jednu velkou nevýhodu - nefunguje na počítačích s procesorem rychlejším než 200 MHz. Na Internetu jsou však dostupné opravené jednotky Crt (i když občas třeba pod jiným názvem), které tuto chybu odstraňují. Lze také stáhnout patch, který umožní, aby staré programy, které byly napsané s využitím Crt, fungovaly i na novějších strojích.
Speciální znaky ASCII (nevypíšou se, ale něco udělají):
Pořadí | Příkaz | Význam |
---|---|---|
1 | #7 (to samé jako Chr(7)...) | Pípnutí interního generátoru (PC-speaker) |
2 | #8 | Vrátí kurzor o jeden znak zpět (Backspace) |
3 | #10 | LF Line Feed. Posune kurzor o řádek níž, když je kurzor dole, vše na obrazovce posune o řádek nahoru |
4 | #13 | CR Carriage Return. Vrátí kurzor na začátek řádky. (CRLF je konec řádky) |
Při čtení dat z klávesnice mají speciální význam tyto klávesy (a tyto kombinace):
Pořadí | Klávesa | Význam |
---|---|---|
1 | BackSpace | Smaže poslední vložený znak |
2 | ESC | Smaže celou řádku |
3 | Enter | Ukončí řádku a vloží na konec znak konce řádky (CRLF) |
4 | Ctrl-S | Stejné jako BackSpace |
5 | Ctrl-D | Vybere znak z předchozí řádky |
6 | Ctrl-A | Jako ESC |
7 | Ctrl-F | Zkopíruje celou předchozí řádku |
8 | Ctrl-Z | V případě, že jsme nastavil CheckEOF na true, ukončí řádku a vloží znak konce souboru |
Některá čísla dostala své vlastní názvy, aby bylo lépe vidět, v jakém významu jsou použita. (Pochopitelně můžeme od použití těchto názvů upustit, ale náš program pak bude pro ostatní méně srozumitelný, čemuž se chceme vyhnout, že?!)
Pořadí | Konstanta | Hodnota | Význam |
---|---|---|---|
1 | BW40 | 0 | 40x25 černobílý (Black/White) režim na barevném adaptéru (EGA,CGA,..) |
2 | CO40 | 1 | 40x25 barevný (Color) režim na barevném adaptéru |
3 | BW80 | 2 | 80x25 černobílý (Black/White) režim na barevném adaptéru |
4 | CO80 | 3 | 80x25 barevný (Color) režim na barevném adaptéru |
5 | Mono | 7 | 80x25 černobílý (Black/White) režim na monochromatickém adaptéru (Hercules) |
6 | Font8x8 | 256 | u EGA/VGA karet 43/50 řádek - lze kombinovat s ostatními konstantami sčítáním : CO80+Font8x8 - barevný režim 80x43 |
7 | C40 | C040 | Totéž co CO40, zachováno v rámci kompatibility s Turbo Pascalem 3.0 |
8 | C80 | C080 | Stejné jako CO80, zachováno kvůli kompatibilitě |
Tyto konstanty se používají např. u procedury TextMode, či při zjišťování nastaveného režimu pomocí proměnné LastMode. Pochopitelně lze využít i číselnou reprezentaci těchto konstant, což však sníží přehlednost a přenositelnost programu (v dalších verzích mohou být daná čísla použita k jiným účelům...)
Při práci s barvou textu (či pozadí) je použití těchto konstant výhodné, protože je okamžitě vidět, co to která barva znamená (nemusíme si pamatovat příslušná čísla).
Hodnota | Název | Význam |
---|---|---|
0 | Black | Černá |
1 | Blue | Modrá |
2 | Green | Zelená |
3 | Cyan | Světle modrá |
5 | Red | Červená |
6 | Magenta | Fialová |
7 | Brown | Hnědá |
8 | DarkGray | Tmavě šedá |
9 | LightBlue | Jasně modrá |
10 | Lightgreen | Jasně zelená |
11 | LightCyan | Jasně světlá modrá |
12 | LightRed | Světle červená |
13 | LightMagenta | Světle fialová |
14 | Yellow | Žlutá |
15 | White | Bílá |
128 | Blink | Blikající - lze kombinovat s ostatními: White+Blink je blikající bílá |
Pomocí těchto proměnných je možné zjistit a změnit aktuální nastavení výstupu na obrazovku a přijmu dat z klávesnice.
Pořadí | Proměnná:Typ | Význam |
---|---|---|
1 | CheckBreak :Boolean; | V případě, že ji nastavíme na false, Ctrl-Break neukončí program |
2 | CheckEOF :Boolean; | V případě, že nastavíme na true, povolí generování znaku konce souboru - např. pomocí Ctrl-Z |
3 | CheckSnow :Boolean; | V případě, že nastavíte na false, bude zápis do videopaměti probíhat i když se na obrazovka zrovna kreslí, což může vést k efektu "sněžení", je to ale rychlejší a např. u CGA se to vyplatí |
4 | DirectVideo :Boolean; | V případě, že nastavíme na false, budou se pro výpis dat volat funkce operačního systému, což je mnohem pomalejší, ale lépe přenositelné (funguje pro všechny grafické karty) |
5 | LastMode :word; | Aktuální textový režim - viz konstanty textových režimů |
6 | TextAttr :byte; | Barva textu, pozadí, a zda je zapnuto blikání |
7 | WindMin :word; | Levý horní roh aktuálního okna |
8 | WindMax :word; | Pravý dolní roh aktuálního okna |
Hodnoty ve WindMin a WindMax jsou uloženy takto : vyšší byte ( Hi(Wind...) ) udává Y-ovou souřadnici a nižší byte (Lo(Wind...)) udává X-ovou souřadnici.
Hodnota TextAttr je složena v jednom bytu následovně : Bbbbffff. První čtyři bity (ffff) představují barvu textu (16 možností). Další 3 bity představují barvu pozadí (8 variant) a poslední bit B obsahuje informaci o tom, zda text bliká, či ne.
Barevné konstanty lze použít pro změnu proměnné TextAttr,
musíme ovšem barvu pozadí vynásobit šestnácti (aby se posunula na správné
místo) :
Tedy např. TextAttr:=White+Green*16+Blink;
Poznamenejme, že možnost blikání textu lze na novějších grafických adaptérech (EGA, VGA) vypnout. (Pro barvu pozadí nám zbudou 4bity a tím pádem šestnáct možností.) Jediná možnost, jak toho dosáhnout, je zavolat službu 3 přerušení $10 :
asm
mov AH,10h {služba práce s paletou}
mov AL,03h {podslužba - v daném bitu nastav intenzitu nebo blikání}
mov BL,0h {Nastav intenzitu napíšeme-li zde MOV BL,1h nastavíme blikání}
int $10 {přerušení pro práci s obrazovkou}
end;
Od této chvíle můžeme pomocí TextAttr dosáhnout 16 barev i v pozadí. (Procedura TextBackground však stále umožňuje jen 8 "tmavých" barev)
Pořadí | Příkaz | Význam |
---|---|---|
1 | AssignCrt(var f:Text); | Přiřadí soubor k Crt (výstup bude řešen přímým zápisem podle hodnoty DirectVideo) |
2 | ClrEol; | Vymaže znaky od kurzoru do konce řádky |
3 | InsLine; | Vloží prázdnou řádku před řádku, na níž je kurzor (jde-li o poslední řádku, vše se posune o řádku nahoru) |
4 | DelLine; | Smaže řádku na níž kurzor, vše pod ní šoupne o řádku nahoru. |
5 | ClrScr; | Smaže obrazovku (zaplní ji celou jen barvou pozadí) a umístí kurzor do levého horního rohu |
6 | GotoXY(X,Y:byte); | Přesune kurzor na X,Y (X-číslo sloupce, Y-číslo řádky) |
7 | WhereX:byte; | Zjistí na kterém sloupci je kurzor; |
8 | WhereY:byte; | Zjistí na které řádce se nachází kurzor |
9 | TextBackground(Color:byte); | Změní barvu pozadí (Bere na vědomí jen hodnoty 0..7, vše ostatní mod 8) |
10 | TextColor(Color:byte); | Změní barvu textu (Bere na vědomí jen 0..15, vše ostatní mod 16) |
11 | KeyPressed:boolean; | Byla stisknuta klávesa? |
12 | ReadKey:char; | Přečte kód stisknuté klávesy, u funkčních kláves generuje nejprve #0 a teprve poté kód klávesy |
13 | HighVideo; | Nastaví vysoký jas (barvy textu 0..7 jsou převedeny na 8-15) |
14 | LowVideo; | Nastaví nízký jas (barvy textu 8-15 jsou o 8 sníženy na 0..7) |
15 | NormVideo; | Odstraní efekt procedur HighVideo a LowVideo, vrátí barvám původní hodnoty. |
16 | Delay(ms:word); | Počká ms milisekund, poté pokračuje v běhu programu; |
17 | Sound(Hz:word); | Začne na Speakeru vydávat zvuk o frekvenci Hz Hertzů (šílený pískot) |
18 | NoSound; | Umlčí Speaker; (vypne ten pískot, jestliže použijete Sound, nezapomeňte na NoSound, jinak pištění nepřestane ani po skončení programu) |
19 | TextMode(Mode:word); | Nastaví textový režim Mode, smaže celou obrazovku a zruší všechny uživatelem vytvořená okna, nastaví DirectVideo a CheckSnow na true, zavolá NormVideo a výsledek uloží do LastMode |
20 | Window(X1,Y1,X2,Y2:byte); | Vytvoří textové uživatelské okno (X1,Y1 jsou souřadnice levého horního rohu, X2,Y2 pak pravého dolního). Veškeré procedury a funkce (kromě TextMode a Window) se nyní budou vztahovat pouze na toto okno. Souřadnice se budou brát relativně vzhledem k levému hornímu rohu našeho okna. |
Pozn. k funkci ReadKey : Pokud byla stisknuta tzv funkční
klávesa (šipka, editační klávesa, ESC, F1..F12), generuje DOS nejprve znak s
kódem 0 a teprve poté významový kód (sami zjistěte jaký pro kterou klávesu). V
těchto případech je nutné použít ReadKey dvakrát za sebou.
Další speciální klávesy žádný kód negenerují (např - Ctrl, Alt, Shift, Caps Lock,
Scroll Lock, Num Lock, Print Screen, Pause, Break, ...)
To by bylo k jednotce Crt vše. Najděte si v Sysmanovi přerušení 10h, zjistěte významové kódy funkčních kláves, napište program, kde využijete všech získaných poznatků. (Ale hlavně, přesvědčte se, že vaše jednotka Crt funguje na vašem počítači a popř. stáhněte jinou - připomínám, že některé kompilátory mají příkazy jednotku Crt zahrnuty již v jednotce System - u takovýchto kompilátorů se problém s jednotkou Crt nevyskytuje).
Tato jednotka umožňuje pracovat s grafikou, typy písma, bitově orientovanými obrazy, .. Pro praktické použití je však příliš pomalá. Rychlá grafika se dělá v assembleru (nejrychlejší je přímé programování grafické karty, či využití standardních dodávaných ovladačů...). Grafická obrazovka a ovládání grafiky tvoří v Pascalu rozsáhlý systém. Sama jednotka Graph požaduje pro svou funkci množství dalších souborů (grafické ovladače, soubory fontů,...).
Grafika Pascalu je rastrová, souřadnice odpovídají jednotlivým pixelům. Připomínám, že orientace osy y je shora dolů.
Jednotka Graph definuje nejen své vlastní procedury, funkce a konstanty, využívá dokonce i vlastních typů.
Soubory potřebné pro jednotku Graph jsou uloženy v adresáři BGI. Nejdůležitější jsou drivery (ovladače grafických adaptérů) - ty mají příponu BGI. Další důležitou součástí jsou pak fonty s příponou CHR
Grafické drivery jsou uloženy v adresáři BGI, standardně jsou dodávány tyto soubory :
Ovladač | Zařízení podporovaná ovladačem |
---|---|
ATT.BGI | AT&T 6300 (400 řádek) |
CGA.BGI | CGA, MCGA |
EGAVGA.BGI | EGA, VGA, SVGA (dnes tedy jediný použitelný) |
HERC.BGI | monochromní Hercules |
IMB8514.BGI | IMB 8514 (1024x768) |
PC3270.BGI | terminál 327x |
VESA16.BGI | VESA (1280x1024) |
Pochopitelně existuje možnost tvorby vlastního ovladače a jeho využití. EGAVGA.BGI ovšem dokáže pracovat se všemi moderními grafickými kartami, tvorba vlastního driveru je tedy zbytečná (jestliže chceme grafiku urychlit, je lepší napsat si vlastní funkce v assembleru...).
Standardně jsou dodávány tyto fonty :
Název souboru | Typ fontu |
TRIP.CHR | patkový |
SMALL.CHR | zmenšený |
SANS.CHR | bezpatkový |
GOTH.CHR | švabach |
SCRI.CHR | psací |
SIMP.CHR | Simplex |
TSCR.CHR | patkový psací |
LCOM.CHR | Complex |
EURO.CHR | europský |
BOLD.CHR | tučný |
Pochopitelně je možné sadu fontů rozšířit nahráním dalších či tvorbou vlastních souborů.
Typy proměnných definované v jednotce Graph jsou většinou úzce specifické, vyskytují se pouze u některých funkcí. Zde je uvedena jen jejich definice, konkrétní použiti bude ilustrována až u příslušných funkcí.
ArcCoordsType = record {Jako návratová hodnota funkce GetArcCoords obsahuje parametry posledně kresleného oblouku či poslední elipsy} X,Y:Integer; {Souřadnice středu} XStart,YStar:Integer; {Počáteční bod oblouku} XEnd,YEnd:Integer; {Koncový bod oblouku} end;
FillPatternType = array[1..8] of Byte; {Styl výplně (bitově popisuje čtverec 8x8)}
FillSettingsType = record {Typ nastavené výplně} Pattern:Word;{Typ výplně (viz konstanty typu výplně)} Color:Word; {Barva výplně} end;
LineSettingsType = record {Typ vykreslovaných čar} LineStyle : Word; {Typ kreslené čáry - viz konstanty typu čáry} Pattern : Word; {Vzor - viz konstanty } Thickness : Word; {Tloušťka čáry - v Pixelech viz konstanty šířky čáry} end;
PaletteType = record Size : Byte; {Skutečný počet barev v paletě} Colors : array[0..MaxColor] of Shortint; {Konstanta MaxColor=15, pole obsahuje skutečné informace o barvách 0..Size} end;
PointType = record X,Y:integer; {X-ová a Y-ová souřadnice bodu} end;
TextSettingsType = record Font : Word; {Nastavený font - konstanty fontu} Direction : Word;{Směr textu - konstanty směru textu} CharSize : Word; {Velikost písmen - konstanty velikosti fontu} Horiz : Word;{Horizontální zarovnání - konstanty horizontálního zarovnání} Vert : Word;{Vertikální zarovnání - konstanty vertikálního zarovnání} end;
ViewPortType = record X1,Y1,X2,Y2 : Integer; {Souřadnice levého horního a pravého dolního rohu "okna"} Clip : Boolean; {Ořezávání - viz konstanty ořezávání Zapne či vypne ořezávání výstupu do aktuálního ViewPortu} end;
Podívejme se blíže na význam LineSettingType. Je-li LineStyle=12, tak Pattern určuje uživatelský typ kreslení čáry. (Bráno bitově : 17 = 00010001; a odzadu - znamená, že první bod je vyplněn, druhý, třetí a čtvrtý ne, pátý jo a zbytek je prázdný).
Podobný význam má FillPatternType : To určuje vyplnění obdélníku 8x8 bitů. Index 1 označuje horní řádku a index 8 řádku dole. Jednotlivé řádky se pak berou stejně jako u LineSettingType...
Jednotka Graph obsahuje celé množství konstant (jejichž názvy jsou většinou podobně jako u Crt pouhou mnemotechnickou pomůckou). Použití těchto konstant zvyšuje přehlednost programu. Pro snaží orientaci rozdělíme konstanty do několika kategorií:
Ne každá operace se povede. Stav výsledku lze získat pomocí GraphResult. Nastala-li chyba, můžeme zjisti jaká (anglický název získáme pomocí funkce GraphErrorMsg(CisloChyby).
Kód (Číselná hodnota) | Český popis | Anglický popis | Název konstanty |
---|---|---|---|
0 | bez chyby | No error | grOK |
-1 | grafika není instalována | (BGI) Graphics not installed | grNoInitGraph |
-2 | není k dispozici grafická karta | Graphics hardware not detected | grNotDetected |
-3 | ovladač nenalezen | Device driver not found | grFileNotFound |
-4 | chyba v souboru ovladače | Invalid device driver file | grInvalidDriver |
-5 | nedostatek paměti pro nahrání ovladače | Not enough memory to load driver | grNoLoadMem |
-6 | není paměť pro hledání ploch k vyplnění | Not enough memory to scan fill | grNoScanMem |
-7 | nedostatek paměti pro vyplnění | Not enough memory to flood fill | grNoFloodMem |
-8 | font nenalezen | Font file not found | grFontNotFound |
-9 | nedostatek paměti pro nahrání fontu | Not enough memory to load font | grNoFontMem |
-10 | špatný grafický režim pro daný driver | Invalid graphics mode for selected driver | grInvalidMode |
-11 | neurčená chyba | Graphics error | grError |
-12 | I/O chyba | Graphics I/O error | grIOError |
-13 | špatná hlavička fontu | The font header is not recognized | grInvalidFont |
-14 | špatné číslo fontu v hlavičce fontu | The font number in the font header is not recognized | grInvalidFontNum |
Vše je stejné jako u Crt, opakování neškodí (pro EGA se konstanty trochu liší viz níže):
Název (anglicky) | Hodnota | Český překlad |
---|---|---|
Black | 0 | Černá |
Blue | 1 | Modrá |
Green | 2 | Zelená |
Cyan | 3 | Světle modrá |
Red | 4 | Červená |
Magenta | 5 | Fialová |
Brown | 6 | Hnědá |
LightGray | 7 | Světle šedá |
Název (anglicky) | Hodnota | Český překlad |
DarkGray | 8 | Tmavě šedá |
LightBlue | 9 | Jasná modrá |
LightGreen | 10 | Jasná zelená |
LightCyan | 11 | Jasná světlá modrá |
LightRed | 12 | Světlá červená |
LightMagenta | 13 | Světle fialová |
Yellow | 14 | Zářivá žlutá |
White | 15 | Jasná bílá |
Pochopitelně Blink způsobí blikání textu. (Efekt jde vypnout (jak jsme si ukázali již v Crt). Poté můžeme i v pozadí mít všech šestnáct barev.). Možnost blikání textu odstraníme (či zase zapneme) takto :
asm {Vypne možnost blikání a umožní tak světlé barvy i na pozadí} mov AH,10h mov AL,3h mov BL,0h int 10h end; asm {Zapne možnost blikání} mov AH,10h mov AL,3h mov BL,1h int 10h end;
Kódy barev jsou prakticky shodné s normálními, jen mají příponu EGA (ovšem EGABrown=20) a světlé barvy začínají až od 56.
Název (anglicky) | Hodnota | Český překlad |
EGABlack | 0 | Černá |
EGABlue | 1 | Modrá |
EGAGreen | 2 | Zelená |
EGACyan | 3 | Světle modrá |
EGARed | 4 | Červená |
EGAMagenta | 5 | Fialová |
EGABrown | 20 | Hnědá |
EGALightGray | 7 | Světle šedá |
Název (anglicky) | Hodnota | Český překlad |
EGADarkGray | 56 | Tmavě šedá |
EGALightBlue | 57 | Jasná modrá |
EGALightGreen | 58 | Jasná zelená |
EGALightCyan | 59 | Jasná světlá modrá |
EGALightRed | 60 | Světlá červená |
EGALightMagenta | 61 | Světle fialová |
EGAYellow | 62 | Zářivá žlutá |
EGAWhite | 63 | Jasná bílá |
Tyto konstanty slouží k rozlišení jednotlivých grafických driverů (a tím tedy i k rozlišení instalovaných grafických karet).
Název konstanty | Hodnota | Poznámka |
CurrentDriver | -128 | slouží pouze při volání funkce GetModeRange a DetectGraph, jedná se o právě aktivní Driver |
Detect | 0 | Slouží k autodetekci (kde je to možné) |
CGA | 1 | |
MCGA | 2 | |
EGA | 3 | |
EGA64 | 4 | |
EGAMono | 5 | |
IMB8514 | 6 | |
HercMono | 7 | |
ATT400 | 8 | |
VGA | 9 | Spolu s 0 jediná dnes použitelná hodnota |
PC3270 | 10 |
Každý adaptér má různé módy (různé rozlišení, různé palety,..). K jejich rozlišení slouží následující konstanty :
Název | Hodnota | Karta (adaptér) | Rozlišení | Počet barev | Paleta | Počet stránek |
---|---|---|---|---|---|---|
CGAC0 | 0 | CGA | 320x200 | 0 | 1 | |
CGAC1 | 1 | CGA | 320x200 | 1 | 1 | |
CGAC2 | 2 | CGA | 320x200 | 2 | 1 | |
CGAC3 | 3 | CGA | 320x200 | 3 | 1 | |
CGAHi | 4 | CGA | 640x200 | 1 | ||
MCGAC0 | 0 | MCGA | 320x200 | 0 | 1 | |
MCGAC1 | 1 | MCGA | 320x200 | 1 | 1 | |
MCGAC2 | 2 | MCGA | 320x200 | 2 | 1 | |
MCGAC3 | 3 | MCGA | 320x200 | 3 | 1 | |
MCGAMed | 4 | MCGA | 640x200 | 1 | ||
MCGAHi | 5 | MCGA | 640x480 | 2 | 1 | |
EGALo | 0 | EGA | 640x200 | 16 | 4 | |
EGAHi | 1 | EGA | 640x350 | 16 | 2 | |
EGA64Lo | 0 | EGA64 | 640x200 | 16 | 1 | |
EGA64Hi | 1 | EGA64 | 640x350 | 4 | 1 | |
EGAMonoHi | 3 | EGA | 640x350 | 1 nebo 2 | ||
HercMonoHi | 0 | Hercules | 720x348 | 2 | ||
ATT400C0 | 0 | AT&T 6300 | 320x200 | 0 | 1 | |
ATT400C1 | 1 | AT&T 6300 | 320x200 | 1 | 1 | |
ATT400C2 | 2 | AT&T 6300 | 320x200 | 2 | 1 | |
ATT400C3 | 3 | AT&T 6300 | 320x200 | 3 | 1 | |
ATT400Med | 4 | AT&T 6300 | 640x200 | 1 | ||
ATT400Hi | 5 | AT&T 6300 | 640x400 | 1 | ||
VGALo | 0 | VGA | 640x200 | 16 | 4 | |
VGAMed | 1 | VGA | 640x350 | 16 | 2 | |
VGAHi | 2 | VGA | 640x480 | 16 | 1 | |
PC3270Hi | 0 | PC3270 | 720x350 | 1 | ||
IBM8514Lo | 0 | IMB8514 | 640x480 | 256 | ||
IMB8514Hi | 1 | IMB8514 | 1024x768 | 256 |
Zapamatujte si u čísla pouze pro VGA. Za povšimnutí stojí také fakt, že každý driver podporuje mód 0. Co se palet týče, mají jednotlivá čísla tento význam :
Číslo palety | 1.složka | 2.složka | 3.složka |
0 | LightGreen | LightRed | Yellow |
1 | LightCyan | LightMagenta | White |
2 | Green | Red | Brown |
3 | Cyan | Magenta | LightGray |
Název | Hodnota | Význam |
TopOn | True | Kreslí se vrchní hrany (objekt je navrchu) |
TopOff | False | Horní hrany se nekreslí (na objektu je něco dalšího) |
Podívejte se blíže na Bar3D.
Název | Hodnota | Význam |
NormalPut | 0 | normální umístění vykreslovaných objektů |
CopyPut | 0 | normální umístění vykreslovaných objektů |
XORPut | 1 | je-li na pozici pixel, smaže ho, jinak nakreslí umisťovaný pixel (Vysledek = Puv XOR Novy) |
ORPut | 2 | vykreslení jen tam, kde je jeden nebo druhý (tzv. přečmárávání, vše zůstává na obrazovce) |
ANDPut | 3 | kreslí jen tam, kde již něco je |
NOTPut | 4 | Udělá negativ |
Název | Hodnota | Význam |
ClipOn | True | Zapne ořezávání (veškerý grafický výstup je omezen do aktuálního viewportu) |
ClipOff | False | Vypne ořezávání |
Více informací naleznete u ViewPort.
Kreslíme-li nějaký uzavřený objekt (např. pomocí Bar), jeho vnitřek je vyplněn tímto grafickým vzorem. Vyzkoušejte si sami, jak který vzor přesně vypadá.
Název | Hodnota | Význam |
EmptyFill | 0 | Nechá vnitřek prázdný (barva pozadí) |
SolidFill | 1 | Vyplní celý vnitřek danou barvou |
LineFill | 2 | Vyplní vnitřek vodorovnými linkami (---) |
LtSlashFill | 3 | Vyplní vnitřek šrafováním (///) |
SlashFill | 4 | Vyplní vnitřek tlustým šrafováním (///) |
BkSlashFill | 5 | Vyplní vnitřek tlustým šrafováním (\\\) |
LtBkSlashFill | 6 | Vyplní vnitřek šrafováním (\\\) |
HatchFill | 7 | Vyplní vnitřek čtverečky (vertikální a horiz. linky) |
XHatchFill | 8 | Vyplní vnitřek šrafováním (xxx) |
InterLeaveFill | 9 | Vyplní celý vnitřek, občas nechá díru |
WideDotFill | 10 | Vyplní vnitřek vzdálenými tečkami |
CloseDotFill | 11 | Vyplní vnitřek blízko u sebe ležícími tečkami |
UserFill | 12 | Vyplní vnitřek uživatelem definovanou výplní |
Název | Hodnota | Význam |
---|---|---|
BottomText | 0 | Text se začne vypisovat dole |
CenterText | 1 | Text se začne vypisovat uprostřed |
TopText | 2 | Text se začne vypisovat nahoře |
Název | Hodnota | Význam |
LeftText | 0 | Zarovnání doleva |
CenterText | 1 | Zarovnání na střed |
RightText | 2 | Zarovnání doprava |
Název | Hodnota | Význam |
SolidLn | 0 | Nepřerušovaná čára |
DottedLn | 1 | Tečkovaná čára |
CenterLn | 2 | Krátká čárka, dlouhá čárka, krátká čárka, ... |
DashedLn | 3 | Čárkovaná čára |
UserBitLn | 4 | Uživatelsky definovaný čára |
Název | Hodnota | Význam |
NormWidth | 1 | Normální tloušťka čáry |
ThickWidth | 3 | Tlustá čára |
Název | Hodnota | Význam |
DefaultFont | 0 | Standardně nastavený font |
TriplexFont | 1 | patkové písmo |
SmallFont | 2 | velmi malé písmo |
SansSerifFont | 3 | bezpatkové písmo |
GothicFont | 4 | "gotické" písmo |
Název | Hodnota | Význam |
HorizDir | 0 | Text se píše zleva doprava |
VertDir | 1 | Text se píše zdola nahoru |
Název | Hodnota | Význam |
UserCharSize | 0 | Uživatelem definovaná velikost písma |
Počet funkcí a procedur jednotky Graph je obrovský, pro přehlednost tedy příkazy této jednotky dělíme do tří hlavních kategorií: Příkazy výkonné (to jsou ty, které něco dělají a řídí se přitom aktuálním nastavením), dále příkazy zjišťovací (ty zjišťují aktuální nastavení) a příkazy nastavovací (ty aktuální nastavení mění).
Tato kategorie přímo kreslí grafické objekty.
Pořadí | Příkaz | Význam |
---|---|---|
1 | Arc(X,Y:integer,StAngel,EndAngle,Radius:Word); | Nakreslí oblouk kružnice se středem v [X,Y] s poloměrem Radius, Začne na StAngle(ve stupních) a skončí ve EndAngle (ve stupních) - úhly zadáváme proti směru otáčení hodinových ručiček |
2 | Bar(X1,Y1,X2,Y2); | Nakreslí a vyplní pravoúhelník (obdélník či čtverec). X1,Y1 jsou souřadnice levého horního rohu a X2,Y2 pak souřadnice pravého dolního rohu |
3 | Bar3D(X1,Y1,X2,Y2:Integer; Depth:Word; Top:Boolean); | Nakreslí kvádr (X1,Y1 souřadnice levého horního rohu, X2,Y2 souřadnice pravého dolního rohu, Depth - hloubka kvádru, Top - Má se kreslit i horní strana? - viz konstanty pro Bar3D |
4 | Circle(X,Y:Integer; Radius:Word); | Nakreslí kružnici se středem v X,Y a poloměrem Radius |
5 | DrawPoly(Number:Word; var Points); | Nakreslí mnohoúhelník (spojí body čarou), Number udává počet bodů. Points je array[1..Number] of PointType |
6 | Ellipse(X,Y:Integer; StAngle,EndAngle:word; XRadius,YRadius:word); | Nakreslí eliptický oblouk. X,Y jsou souřadnice středu elipsy, StAngle a EndAngle označují počáteční a koncový úhel (viz Arc), XRadius a YRadius délku poloos ve směru osy X a Y. |
7 | FillPoly(Number:Word; var Points); | Nakreslí uzavřený mnohoúhelník a vyplní ho |
8 | FillEllipse(X,Y:Integer; XRadius,YRadius:Word); | Nakreslí vyplněnou elipsu (X,Y souřadnice středu, XRadius, YRadius délky poloos) |
9 | FloodFill(X,Y:Integer; Border:Word); | Vyplní oblast, ve které leží body X,Y a jejíž hranice jsou dány barvou Border |
10 | GetImage(X1,Y1,X2,Y2; var BitMap); | Uloží do BitMapy obrázek (obdélník co se nachází v s rohy v X1,Y1 a X2,Y2, první dva bity udávají šířku a druhé dva výšku obrázku. pak následuje samotná bitmapa) |
11 | PutImage(X,Y:Integer; var BitMap;var BitBlt); | Vrazí obrázek z BitMapy na souřadnice X,Y stylem BitBlt |
12 | Line(X1,Y1,X2,Y2:Integer); | Nakreslí čáru z X1,Y1 do X2,Y2 (Použije přitom nastavený styl kreslení čar a nastavenou barvu kreslení) |
13 | LineRel(DX,DY:Integer); | Nakreslí čáru od aktuální pozice kurzoru (konec je posunut od začátku o DX a DY) |
14 | LineTo(X,Y:Integer); | Nakreslí čáru od aktuální pozice kurzoru na X,Y |
15 | MoveRel(DX,DY:Integer); | Posune kurzor o DX,DY |
16 | MoveTo(X,Y:Integer); | Přesune kurzor na X,Y |
17 | OutText(Text:string); | Od místa kurzoru vypíše text (nastaveným aktuálním fontem, šířkou ...) - klasické writeln je v grafickém režimu bez účinku |
18 | OutTextXY(X,Y:Integer; Text:string); | Na místě X,Y vypíše text (s vlastnostmi dle aktuálního nastavení) |
19 | PieSlice(X,Y:Integer; StAngle,EndAngle,Radius:Word); | Nakreslí vyplněnou kruhovou výseč (X,Y kruhu; StAngle,EndAngle - počáteční a koncový úhel (ve stupních proti směru hodinových ručiček, Radius - poloměr kruhu). |
20 | Sector(X,Y:Integer; StAngle,EndAngle,XRadius,YRadius:Word); | Nakreslí vyplněnou eliptickou výseč (X,Y střed elipsy, StAngle, EndAngle - počáteční a koncový úhel - ve stupních bráno proti směru hodinových ručiček, XRadiux,YRadius - délky poloos - v pixelech) |
21 | PutPixel(X,Y:Integer, Pixel:Word); | Umístí na pozici X,Y pixel o barvě Pixel |
22 | RecTangle(X1,Y1,X2,Y2:Integer); | Nakreslí nevyplněný čtyřúhelník (X1,Y1 - levý horní roh, X2,Y2 pravý dolní roh) |
Tyto funkce a procedury slouží k zjišťování aktuálního nastavení grafického prostředí. Většina jejich názvů začíná slovíčkem Get (Zjisti).
Pořadí | Příkaz | Význam |
---|---|---|
1 | DetectGraph(var GraphicDriver,GraphMode:integer); | Zjistí aktuální grafický driver a mód. (Viz konstanty grafických driverů a konstanty grafických módů) |
2 | GetDriverName:string; | Vrátí název souboru nahraného driveru (nejčastěji teda EGAVGA.BGI) (Viz soubory driverů) |
3 | GetGraphMode : integer; | Vrátí aktuální grafický režim (viz konstanty grafických režimů) |
4 | GetMaxMode : word; | Vrátí nejvyšší možný grafický mód současného driveru (Viz konstanty grafických módů) |
5 | GetModeName(ModeNumber:word) : string; | Převede číslo módu ModeNumber na řetězec, který mód popisuje (...P4 např. znamená čtyři stránky - vyzkoušejte si použití této procedury) |
6 | GetModeRange(GrDriver:integer;var LoMode,HiMode:integer); | Zobrazí rozsah graf. módů daného driveru (viz konstanty grafických driverů a konstanty grafických módů.) LoMode zobrazuje nejnižší možné číslo a HiMode naopak číslo nejvyšší možné.) Tato procedura spolehlivě funguje pouze u Borlandských driverů. |
7 | GraphErrorMsg(ErrorCode:integer):string; | Převede kód grafické chyby na její popis v angličtině. Viz konstanty chybových hlášení. |
8 | GraphResult : integer; | Vrátí výsledek naposledy vykonané operace (záporné číslo znamená chybu viz konstanty chybových hlášení) |
9 | GetAspectRatio(var Xasp,Yasp:word); | Zjistí poměr rozměrů pixelu |
10 | GetMaxX : integer; | Zjistí maximální hodnotu X, při které je bod ještě na obrazovce (0 je také na obrazovce) |
11 | GetMaxY : integer; | Zjistí maximální hodnotu Y, při které je bod ještě na obrazovce (0 je také na obrazovce) Celkové rozlišení obrazovky v daném režimu je tedy (GetMaxX+1) x (GetMaxY+1) |
12 | GetBkColor : word; | Vrátí aktuální barvu pozadí |
13 | GetColor : word; | Vrátí aktuální barvu kreslení |
14 | GetMaxColor : word; | Vrátí číslo maximální použitelné barvy (tedy číslo 15), u černobílých monitorů 1... |
15 | GetPalette(var Palette : PaletteType); | Vrátí aktuální paletu (přiřazení skutečných barev těm stupidním patnácti hodnotám) |
16 | GetPaletteSize : word; | Vrátí počet barev v aktuální paletě |
17 | GetDefaultPalette(var Palette: PaletteType); | Vrátí přednastavenou paletu (tedy tu, co je tam hned po InitGraph) |
18 | GetFillPattern(var FillPattern:FillPatternType); | Vrátí aktuální uživatelský výplňový vzor (viz FillPatternType) |
19 | GetFillSettings(var FillInfo:FillSettingsType); | Vrátí informace o stylu vyplňování (viz FillSettingsType) |
20 | GetArcCoords(var ArcCoords: ArcCoordsType); | Vrátí informace o posledně kresleném oblouku (viz ArcCoordsType) |
21 | GetLineSettings(var LineInfo : LineSettingsType); | Vrátí informace o nastaveném stylu kreslení čar (viz LineSettingsType) |
22 | GetTextSettings(var TextInfo : TextSettingsType); | Vrátí informace o nastavení vypisování textu (viz TextSettingType) |
23 | TextHeight(Text:string):word; | Vrátí výšku zadaného textu v pixelech. (Výška se vztahuje k použitému nastavení textu) |
24 | TextWidth(Text:string):word; | Vrátí šířku zadaného textu v pixelech (Šířka se vztahuje k aktuálnímu nastavení textu) |
25 | GetViewSettings(var ViewPort:ViewPortType); | Vrátí informace o aktuálním ViewPortu |
26 | GetPixel(X,Y:Integer) : word; | Vrátí barvu pixelu na pozici X,Y |
27 | GetX : integer; | Vrátí X-ovou souřadnici kurzoru |
28 | GetY : integer; | Vrátí Y-ovou souřadnici kurzoru |
29 | ImageSize(X1,Y1,X2,Y2:Integer) : word; | Vrátí velikost, kterou v paměti zabere BitMapa obrázku s rohy v X1,Y1 a X2,Y2. Započítává i informace o šířce a výšce daného obrázku. V případě, že zadaný obraz nejde z nějakého důvodu vytvořit (např. by byl paměťově příliš náročný) vrací nulu. |
Tyto podprogramy slouží k nastavení vlastností grafiky. Nejdůležitější procedurou je InitGraph, který do paměti nahraje grafický ovladač a umožní tak práci s grafikou (tuto poměrně zdlouhavou činnost lze několika způsoby obejít).
Pořadí | Příkaz | Význam |
---|---|---|
1 | InitGraph(var GraphDriver,GraphMode:integer; Path:string); | Nahraje do paměti grafický ovladač ("zapne grafiku"). GraphDriver udává
požadovaný ovladač (nejčastěji tedy Detect, GraphMode požadovaný mód, Path je
cesta k ovladači). Nejčastější použití je tedy toto Gd:=Detect; Gm:=Detect; InitGraph(Gd,Gm,'C:\PASCAL\BGI'); (prázdná cesta znamená, že se Driver nachází v adresáři s programem, což je nezbytnost, pokud chceme např. program dále šířit). Viz též grafické drivery, konstanty grafických driverů, konstanty grafických módů) |
2 | CloseGraph; | Ukončí grafický režim a obnoví původní textovou obrazovku (Vždy zavoláme před skončením programu) |
3 | ClearDevice; | Smaže obrazovku (popř. viewport) |
4 | GraphDefaults; | Obnoví původní nastavení (vše bude jako po InitGraphu) |
5 | SetGraphMode(Mode:Integer); | Nastaví grafický mód (viz konstanty grafických módů |
6 | RestoreCrtMode; | Obnoví textový režim obrazovky |
7 | SetGraphBufSize(BufSize:word); | Nastaví velikost grafické paměti (standardně 4Kb), musí se zavolat ovšem již před InitGraphem |
8 | SetAspectRatio(XAsp,YAsp:Word); | Nastaví poměr x-ové a Y-ové strany pixelu na Xasp:Yasp (použijeme např. není-li kružnice kruhová) |
9 | InstallUserDriver(Name:string,AutoDetectPointer:pointer) :integer; | Zavede do paměti nový driver (ze souboru Name), AutoDetectPointer je ukazatel na uživatelskou proceduru, která pro Driver detekuje vhodný grafický mód). Nový driver bude dostupný pod číslem integer... |
10 | InstallUserFont(Name:string):integer; | Zavede nový font ze souboru (a dá mu číslo, které pak budeme používat, budeme-li tento font chtít zpřístupnit) |
11 | RegisterBGIDriver(driver:pointer):integer; | Zapíše nový driver (na který ukazuje pointer) a dá mu číslo (které pak využije např. InitGraph) |
12 | RegisterBGIFont(font:pointer):integer; | Zapíše nový font (na který ukazuje pointer) a dá mu číslo (které pak využijeme např. u SetTextStyle) |
13 | SetActivePage(Page:word); | Nastaví stránku, na které se budou provádět operace (některé grafické karty umožňují v paměti uchovat více stránek a pak přepnout) Používá se především při tvorbě animací |
14 | SetVisualPage(Page:word); | Nastaví aktivní (viditelnou stránku) |
15 | SetBkColor(Color:Word); | Nastaví barvu pozadí (viz Barvy) |
16 | SetColor(Color:Word); | Nastaví barvu kreslení (viz Barvy) |
17 | SetAllPalette(var Palette); | Nastaví Paletu (použijte proměnnou typu PaletteType) |
18 | SetPalette(ColorNumber:word,Color:shortint); | Změní nastavení barvy ColorNumber v aktuální paletě |
19 | SetRGBPalette(ColorNum,RedValue,GreenValue,BlueValue:Integer); | Změní nastavení barvy ColoNum v paletě pomocí RGB (pouze u VGA) |
20 | SetViewPort(X1,Y1,X2,Y2:Integer, Clip:Boolean); | Nastaví grafické okno (ViewPort) do obdélníku (X1,Y1-X2,Y2) - všechny souřadnice budou brány relativně vzhledem k levému hornímu rohu ViewPortu) parametr Clip udává, zde se příliš velké obrázky budou ořezávat, či ne - viz Konstanty ořezávání) |
21 | ClearViewPort; | Zruší nastavený ViewPort |
22 | SetFillPattern(Pattern:FillPatternType;Color:Word); | Nastaví vzor výplně (Viz TypVýplně) |
23 | SetFillStyle(FillPattern,Color:word); | Nastaví styl výplně (viz Konstanty výplně) |
24 | SetLineStyle(LineStyle,Pattern,Thickness:word); | Nastaví styl kreslení čáry (viz konstanty kreslení čar) |
25 | SetWriteMode(WriteMode:Integer); | Nastaví způsob kreslení čar (CopyPut nebo XORPut - viz konstanty vykreslování) |
26 | SetTextJustify(Horiz,Vert:word); | Nastaví způsob zarovnání textu (viz Konstanty Zarovnání) |
27 | SetTextStyle(Font, Direction, CharSize : word); | Nastaví vlastnosti písma (viz Konstanty písma) |
28 | SetUserCharSize(MultX,DivX,MultY,DivY:word); | Nastaví uživatelskou velikost písma (šířku násobí MultX/DivX a výšku MultY/DivY). Pomocí této procedury je možné dosáhnou libovolné velikosti písmen |
Všechny konstanty, procedury i funkce si vyzkoušejte. Konstanty používejte pouze na vhodných místech. (Tedy ne SetTextJustify(Blue,Black) ).
Tato jednotka umožňuje pracovat s "šipkovou" grafikou verze 3.0.
V praxi se používá takto : objevíme-li na začátku starého programu řádku {$I GRAPH.P}, tak ji smažeme a do uses připíšeme Graph3 a Turbo3 a Crt Program by poté měl fungovat.
Tyto konstanty definují jednotlivé směry.
Název | Hodnota | Význam |
North | 0 | Nahoru (Na sever) |
East | 90 | Vlevo (Na východ) |
South | 180 | Dolu (Na západ) |
West | 270 | Doprava (Na sever) |
Vzhledem k tomu, že současně s jednotkou Graph3 vždy používáme i jednotku Crt (popř. její novější verzi), nejsou v jednotce Graph3 definovány barevné konstanty. Ty jsou totiž již obsaženy v jednotce Crt. (A kromě toho, kolik EGA zvládala barev?)
Přestože jednotka Graph3 není tolik rozsáhlá jako jednotka Graph, i zde je výhodné procedury a funkce rozdělit do několika skupin. Nejzajímavější jsou asi procedury pro práci s šipkami, zbytek je absolutně na nic.
Pořadí | Příkaz | Význam |
---|---|---|
1 | GraphColorMode; | Nastaví barevný režim s rozlišením 320x200 |
2 | GraphMode; | Nastaví černobílý režim s rozlišením 320x200 |
3 | HiRes; | Nastaví režim s rozlišením 640x200} |
Dnes je technika trochu jinde. I tyto procedury budou tedy dělat něco trochu jiného (např. místo černobílého nastaví barevný režim....))
Graph3 zná jen 4 barvy (0-3) a to černou (ta je všude), zelenou, červenou a hnědou (závisí na paletě)
Pořadí | Příkaz | Význam |
---|---|---|
1 | ColorTable(A,B,C,D:Integer); | Nastaví, novou barevnou tabulku (barva 0 se změní na A, barva 1 na B,...), změna se aplikuje při překreslovaní daného bodu obrazovky (např. pomocí Plot(X,Y,-1);) |
2 | GraphBackground(BkColor:Integer); | Nastaví barvu pozadí (pro celou obrazovku!) |
3 | HiResColor(Color:Integer); | Nastaví barvu kreslení v módu HiRes (popř. barvu pozadí) |
4 | Palette(Num:Integer); | Vybere paletu (tedy ty tři zbývající barvy, 0 je aktuální barva pozadí) |
Jednotlivé palety vypadají takto:
Číslo palety | Barva 1 | Barva 2 | Barva 3 |
0 | Zelená | Červená | Hnědá |
1 | Světle modrá | Světle fialová | Bílá |
2 | Světle zelená | Světle červená | Žlutá |
3 | Světle modrá | Fialová | Světle šedá |
Při volbě vyšších čísel se bude pravidelně střídat paleta 2 a paleta 3.
Pořadí | Příkaz | Význam |
---|---|---|
1 | Arc(X,Y:Integer; Angle, Radius:Word); | Nakreslí oblouk (s počátečním bodem X,Y - nejde o střed ale o začátek oblouku!!!) o velikosti Angle stupňů (po směru hodinových ručiček) a poloměrem Radius. |
2 | Circle(X,Y:Integer; Radius:Word); | Nakreslí kružnici se středem X,Y a poloměrem Radius |
3 | Draw(X1,Y1,X2,Y2:Integer; Color:Word); | Nakreslí čáru z X1,Y1 do X2,Y2 a použije přitom barvu Color |
Pořadí | Příkaz | Význam |
---|---|---|
1 | FillPattern(X1,Y1,X2,Y2,Color:Integer); | Vyplní obdélník X1,Y1,X2,Y2 barvou Color (použije přitom nastavený výplňový vzor) |
2 | FillScreen(Color:Integer); | Vyplní celou obrazovku barvou Color (pro čísla vyšší 3 uživatelsky definovaným vzorem), je-li Color=-1 použije aktuální barevnou mapu (což znamená, že např. po ColorTable(3,2,1,0) FillScreen(-1) invertuje všechny barvy na obrazovce), po ColorTable(0,2,2,2) změní vše, co nemá barvu pozadí na barvu 2...) |
3 | FillShape(X,Y;Color,Border:Word); | Vyplní daný objekt (bod X,Y je libovolný uvnitř, Border je barva hranice, a Color je barva výplně) |
4 | Pattern(var p); | Nastaví styl vyplňování, p je proměnná typu array[0..7] of Byte; (efekt je stejný jako v jednotce Graph - viz výplňový vzor) |
Tyto procedury umožňují pracovat s tzv. želví (šipkovou) grafikou;
Pořadí | Příkaz | Význam |
---|---|---|
1 | ShowTurtle; | Zobrazí želvu (šipku) |
2 | HideTurtle; | Schová želvu |
3 | TurnLeft(Angle:Word); | Otočí želvu o Angle stupňů doleva |
4 | TurnRight(Angle:Word); | Otočí želvu o Angle stupňů doprava |
5 | SetHeading(Direction:Integer); | Otočí želvu do požadovaného směru (ve stupních, nahoře je 0 - viz konstanty Graph3). |
6 | Heading:Integer; | Vrátí aktuální směr natočení hlavičky želvy. |
7 | Forwd(Dist:Word); | Posune želvu o Dist políček dopředu; |
8 | Back(Dist:Word); | Posune želvu o Dist políček dozadu; |
9 | Home; | Vrátí želvu na výchozí bod (doprostřed obrazovky) |
10 | ClearScreen; | Smaže celou obrazovku a vrátí želvu na výchozí bod (doprostřed obrazovky či jejího okénka definovaného pomocí TurtleWindow) |
11 | Wrap; | Zapne přejíždění (vyjede-li želva z obrazovky, objeví se na druhé straně) |
12 | NoWrap; | Vypne projíždění (vyjede-li želva z obrazovky, bude pryč) |
13 | PenDown; | Spustí pero (želva za sebou při pohybu zanechává čáru) |
14 | PenUp; | Zvedne pero (želva je čistotná, nenechává po sobě bordel) |
15 | SetPenColor(Color:Word); | nastaví barvu pera (tedy té čáry, kterou bude želva po sobě zanechávat) |
16 | SetPosition(X,Y:Integer); | Přesune želvu na X,Y (relativně vzhledem k domečku) |
17 | TurtleDelay(ms:Word); | Nastaví prodlevu mezi jednotlivými kroky želvy (v milisekundách) |
18 | TurtleWindow(X1,Y1,X2,Y2:Integer); | Nastaví obdélník X1,Y1-X2,Y2 jako oblast pohybu želvy |
19 | TurtleThere:Boolean; | Je na "želva" vidět na obrazovce? |
20 | XCor:Integer; | X-ová souřadnice želvy (vzhledem k domečku, tedy středu "životního prostoru" želvy) |
21 | YCor:Integer; | Y-ová souřadnice želvy (vzhledem k domečku) |
Pořadí | Příkaz | Význam |
---|---|---|
1 | Plot(X,Y:Integer;Pixel:Integer); | Umístí na souřadnice X,Y bod o barvě Pixel, je-li Pixel=-1 změní barvu bodu podle barevné mapy |
2 | GetDotColor(X,Y):Word; | Zjistí barvu pixelu na souřadnicích X,Y |
3 | GraphWindow(X1,Y1,X2,Y2); | Nastaví obdélník X1,Y1,X2,Y2 jako plochu vykreslování |
4 | GetPic(var P;X1,Y1,X2,Y2:Integer); | Uloží obdélník X1,Y1-X2,Y2 do proměnné P, velikost proměnné P musí být alespoň ((Width+3) div 4)*Height*2+6 (pro módy 320x200) a ((Width+7) div 8)*Height +6 (pro mód 640x200) |
5 | PutPic(var P;X1,Y1:Integer); | Umístí obrázek z proměnné P na obrazovku (X1,Y1 jsou souřadnice levého dolního rohu obrázku). Obrázek je vykreslen podle aktuální barevné mapy |
DCV: Chcete-li tedy pracovat s Pascalskou grafikou, máte již všechny potřebné informace. Zkuste si napsat program, kde využijete všechny možné výplňové vzory (i ty, které si sami nadefinujete, aby vám bylo jasné, jak to s nimi vlastně je - vymyslete si vlastní vzor a pokuste se ho zadat.) A pak pro každou zde uvedenou jednotku napište program, který využije všech uvedených funkcí. Není-li vám něco jasné, najděte si uvedené funkce v Helpu (popis funkcí jednotky Graph3 je k dispozici např. na http://oldcomputers.dyndns.org/public/pub/rechner/epson/~fjkraan/comp/tp30/doc/ v kapitole 19 (soubor tp3_17-20.pdf)