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í) :
Při čtení dat z klávesnice mají speciální význam tyto klávesy (a tyto kombinace):
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?!)
const BW40 = 0; {40x25 černobílý (Black/White) režim na barevném adaptéru (EGA,CGA,..)} CO40 = 1; {40x25 barevný (Color) režim na barevném adaptéru} BW80 = 2; {80x25 černobílý (Black/White) režim na barevném adaptéru} CO80 = 3; {80x25 barevný (Color) režim na barevném adaptéru} Mono = 7; {80x25 černobílý (Black/White) režim na monochromatickém adaptéru (Hercules)} 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} C40 = C040; {Totéž co CO40, zachováno v rámci kompatibility s Turbo Pascalem 3.0} 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ř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).
const 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á} 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; {Bílá} Blink = 128; {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.
var CheckBreak :Boolean; {V případě, že ji nastavíme na false, Ctrl-Break neukončí program} CheckEOF :Boolean; {V případě, že nastavíme na true, povolí generování znaku konce souboru - např. pomocí Ctrl-Z} 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í} 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)} LastMode :word; {Aktuální textový režim - viz konstanty textových režimů} TextAttr :byte; {Barva textu, pozadí, a zda je zapnuto blikání} WindMin :word; {Levý horní roh aktuálního okna} 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)
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á |
A 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.
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).
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).
Pár ukázek využití daných procedur a funkcí (obzvláště procedury InitGraph) :
Za trest si všechny konstanty, procedury i funkce 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.
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ě)
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.
Tyto procedury umožňují pracovat s tzv. želví (šipkovou) grafikou;
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)