Lekce 1.08
Výstup do grafického okna


předchozí lekce (1.07) obsah kurzu následující lekce (1.09)

V předchozí lekci jsme se naučili kreslit do grafického výstupního okna z příkazového okna a nastavovat parametry čar a ploch. Nyní se zaměříme na nastavení grafické plochy a převod části grafického okna ze zásobníku Windows a zpět. Seznámíme se také s možností zápisu textu do grafického okna.

Až dosud jsme měli velikost grafické plochy nastavenou vždy podle toho, jak veliké bylo grafické okno v okamžiku aktivace grafické plochy. Další změnou velikosti grafického výstupního okna se již velikost grafické plochy neměnila. Pokud proto potřebujete nastavit velikost grafické plochy na požadované rozměry, můžete tak učinit povelem ImageInit. Povel inicializuje grafické okno a nastaví jeho velikost na rozměry zadané parametry. Nastaví současně bílou barvu plochy, styl štětce pro plně vybarvené plochy, černou barvu pera, sílu čáry na jeden bod. Inicializací se provede výmaz původního obsahu grafického okna. Vyzkoušejte si například následující hodnoty:


Call ImageInit( 50, 200)
Call ImageInit(120,  60)
Pokud potřebujete znát parametry již inicializované grafické plochy, můžete použít dotazu ImageGetMaxX a ImageGetMaxY, který vrací velikost grafické plochy zadané strany. Pokud budete například potřebovat vykreslit bod uprostřed grafické plochy bez ohledu na velikost aktuálně inicializované plochy, můžete tak učinit povelem:

Call ImagePoint(ImageGetMaxX/2, ImageGetMaxY/2, 5)
V některých případech by bylo vhodné kreslit čáry do grafické plochy zadáváním v absolutních přírůstkových hodnotách místo přesné definice souřadnic. Proto je v grafickém okně definován tzv. grafický ukazatel, který zaznamenává pozici vykreslení posledního bodu. Poloha grafického ukazatele se při použití některých povelů automaticky mění. Je možné ji nastavit i z programu povelem ImageMoveTo. Čáry je možné potom zadat povelem ImageLineTo definicí konečného bodu. Využitím uvedených povelů je možné například nakreslit libovolný mnohostranný mnohoúhelník. Vyzkoušejte si následující povely, které by měly v grafické ploše nakreslit postupně čtyřúhelník:

Call ImageMoveTo( 10,  10)   'přesun na počáteční bod 
Call ImageLineTo(100,  10)   'horní  hrana 
Call ImageLineTo(100, 100)   'pravá  hrana 
Call ImageLineTo(100,  10)   'spodní hrana 
Call ImageLineTo( 10,  10)   'levá   strana 
Až dosud jsme důsledně dodržovali, že je možné textové informace vypisovat zásadně do textového výstupního okna a grafické informace do grafického výstupního okna. Je však možné provádět výstup textových informací i do grafického okna. Nelze přitom použít povelu Writeln, se kterým jsme se již dříve seznámili. Zobrazovat lze pouze textové informace. Čísla je nutné předem převést na řetězce. K výstupu textových informací se používá povelu ImageTextOut. Jako parametry povelu se udávají souřadnice pro zobrazení textu v grafickém okně a řetězec, který se má zobrazit. Povel si můžete vyzkoušet například následujícími příklady:

Call ImageTextOut(10, 10, "OZOGAN")
Call ImageTextOut(10, 30, "BONANZA")
Text se při použití povelu TextOut vypisuje předdefinovaným fontem. Jeho změna se provede buď nastavením přímo z grafického výstupního okna, nebo povely ImageFontColor (barva fontu), ImageFontName (jméno fontu), ImageFontSize (velikost fontu) a ImageFontStyle (styl fontu).

Při nastavení barvy fontu se zadává u povelu ImageFontColor jako parametr buď číslo barvy, nebo jméno konstanty udávající barvu. Tabulka hodnot barev je stejná jako pro nastavení barvy čar a ploch. U povelu ImageFontName, který nastavuje jméno fontu se uvádí přímo jméno fontu. Pokud není zadané jméno v systému Windows dostupné, použije se font s podobným jménem. Velikost fontu se uvádí v povelu ImageFontSize přímo požadovanou hodnotou. Příklad možných nastavení si prozkoušejte včetně výpisu textu po každé změně parametrů fontu:


ImageFontColor(clRed)    'nastaví červenou barvu fontu 
ImageFontColor($00FFFF)  'nastaví žlutou barvu fontu 
ImageFontName("Arial CE")'nastaví font Arial CE 
ImageFontSize(12)        'nastaví velikost fontu 12 bodů
Pro nastavení stylu fontu se v povelu ImageFontStyle požívají jako parametr předdefinované hodnoty jednotlivých stylů. Uvádí se součet hodnot požadovaného výsledného stylu:

------------------------------------------
hodnota   konstanta     popis stylu
------------------------------------------
   0      fsNormal      normální písmo
   1      fsBold        tučné písmo
   2      fsItalic      nakloněné písmo
   4      fsUnderline   podtržené písmo
   8      fsStrikeOut   přeškrtnuté písmo
------------------------------------------
Pro nastavení nakloněného podtrženého písma můžete zadat jednu z následujících možností:

ImageFontStyle(2 + 4)                  'součet hodnot
ImageFontStyle(6)                      'součet 2 + 4
ImageFontStyle(fsItalic + fsUnderline) 'uvedení konstanty
Pokud budete potřebovat převést nakreslený obrázek přes schránku Windows (clipboard) do jiné aplikace, můžete tak provést pomocí povelu ImageToClip, kdy se převede do schránky Windows najednou celá plocha grafického výstupního okna.

Načtení obsahu schránky se provádí povelem ImageFromClip, kdy se jako parametry uvedou souřadnice ohraničené plochy, kam se má obsah schránky převést. Pokud budete chtít převést obsah schránky Windows na celou plochu grafického okna, zadejte příkaz:


Call ImageFromClip(0,0,ImageGetMaxX, ImageGetMaxY)
Někoho z vás již určitě napadlo, že výše uvedené povely, pomocí kterých můžete převádět obrázky do schránky a načítat zpět ze schránky by bylo možné použít na přesun části obrázku na nové místo. Na to je ale výhodnější použít samostatného povelu ImageMove, který provede obě akce najednou. Zadáváte přitom jako parametry souřadnice místa, odkud se má načtení provést a souřadnice, kam se má plocha přenést. Neodpovídá-li přitom poměr stran zdrojové a cílové plochy, nebude zkopírovaný obraz uříznut, ale bude upraven (deformován) do zadaných souřadnic. To je možné využít k mnoha zajímavým efektům. Například ke zvětšení části plochy apod.

Někteří jste již možná netrpěliví, kdy se začne programovat. Místo programování jsme zadávali pouze povely do příkazového okna. Tím jsme se vás snažili naučit nejprve používat několik základních povelů programovacího jazyka. Pokud by jsme začali ihned se základy programování včetně popisu použití povelů bylo by toho najednou moc. Proto jsme si nejprve probrali základy používání povelů a příkazů jazyka a v příští kapitole již začneme opravdu programovat.


předchozí lekce (1.07) obsah kurzu následující lekce (1.09)

OZOGAN, 1 Máje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz