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:


ImageInit( 50, 200);
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:

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 Φty°·helnφk:

ImageMoveTo( 10,  10);  { p°esun na poΦßteΦnφ bod }
ImageLineTo(100,  10);  { hornφ  hrana }
ImageLineTo(100, 100);  { pravß  hrana }
ImageLineTo(100,  10);  { spodnφ hrana }
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:

ImageTextOut(10, 10, 'OZOGAN');
ImageTextOut(10, 30, 'KLONDAIK');
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:


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