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