12. Grafika
12.1. Prvky Line a Shape
12.2. Prvky Image, PictureBox, ClipControl
12.3. Metody a vlastnosti pro kreslenφ
12.3.1. Line
12.3.2. Circle
12.3.3. Point a Pset
12.3.4. Print
Doufßte-li, ₧e se zßkladnφ podporou, kterou poskytuje Visual Basic pro grafiku, vytvo°φte n∞jakΘ komplikovan∞jÜφ grafickΘ aplikace, budete asi zklamßni. Pro nßroΦn∞jÜφ ·Φely budete muset pou₧φt API funkcφ, kterΘ p°φmo podporujφ Windows, funkcφ specializovan²ch knihoven, nebo n∞kterΘho ActiveX prvku. Ale i tak se dajφ vytvo°it zajφmavΘ v∞ci, kterΘ nebudou vynikat rychlostφ, ale pracnostφ.
Ve VB m∙₧ete kreslit na formulß°e, tiskßrny, u₧ivatelskΘ prvky, n∞kterΘ ActiveX prvky atp. Jsou zde dva zp∙soby, jak grafiku vytvß°et. Bu∩ pomocφ metod nebo pomocφ zßkladnφch ActiveX prvk∙. Kter² z t∞chto zp∙sob∙ zvolφte bude zßle₧et na vßs a na typu ·lohy, kterou budete °eÜit.
12.1. Prvky Line a Shape
NejjednoduÜÜφm prvkem pro kreslenφ grafiky je Line, Φili Φßra. U tohoto prvku si m∙₧ete vÜimnout, ₧e nepou₧φvß pro urΦenφ svΘ pozice a velikosti vlastnostφ Left, Top, Width, Height
jako ostatnφ ActiveX prvky ale X1, Y1, X2, Y2
. V²znam t∞chto vlastnostφ je zcela z°ejm². UrΦujφ x-ovΘ a y-ovΘ sou°adnice poΦßteΦnφho a koneΦnΘho bodu Φßry. U tohoto prvku m∙₧eme nastavit tlouÜ¥ku Φßry pomocφ vlastnosti BorderWidth
. Zde je dobrΘ upozornit na n∞kolik komplikacφ. Prvnφ z nich je ta, ₧e Φßra mß p∙lkruhovΘ ukonΦenφ a nenφ mo₧nΘ to zm∞nit. DalÜφm problΘmem je, ₧e p°i pou₧itφ v∞tÜφch tlouÜt∞k nenφ mo₧nΘ vyu₧φt vlastnosti BorderStyle
, kterß urΦuje typ Φßry (p°eruÜovanß, teΦkovanß atd.). Barvu Φßry nastavφte za pomoci BorderColor
. Na zßv∞r jeÜt∞ jedno upozorn∞nφ, tento prvek nemß ₧ßdnΘ udßlosti.
Prvek Shape slou₧φ ke kreslenφ "slo₧it∞jÜφch" grafick²ch objekt∙. Podporuje tvary: Φtverec, obdΘlnφk, kru₧nice, ovßl a Φtverec a obdΘlnφk se zakulacen²mi rohy. Toto nastavφte pomocφ vlastnosti Shape
. Zde jsou ji₧ pro urΦenφ umφst∞nφ a rozm∞r∙ pou₧ity klasickΘ vlastnosti Left, Top, Width, Height
. I u tohoto prvku je mo₧nΘ nastavit typ Φßry, kterou je vykreslen, pomocφ vlastnosti BorderStyle
. Stejn∞ jako u Φßry je zde problΘm p°i pou₧itφ jinΘ tlouÜ¥ky (BorderWidth
) ne₧ "1". Barvu Φßry urΦφte znovu pomocφ BorderColor
. Shape dßle nabφzφ mo₧nost vyplnit zvolen² tvar. K tomu se pou₧ije n∞kolika vlastnostφ. Pomocφ BackColor
nastavφte barvu a pomocφ BackStyle
urΦφte, ₧e pozadφ nemß b²t pr∙hlednΘ. Druh²m krokem je nastavenφ barvy v²pln∞ FillColor
a typu v²pln∞ FillStyle
, kter² nenφ omezen pouze na pr∙hlednost Φi nepr∙hlednost ale nabφzφ i n∞kolik druh∙ Ürafovßnφ.
12.2. Prvky Image, PictureBox, ClipControl
Pro zobrazenφ obrßzk∙ jsou ve VB prvky Image a PictureBox. Ptßte se, kter² je pro zobrazenφ obrßzk∙ vhodn∞jÜφ? Oba podporujφ stejnΘ formßty (bmp, dib, gif, jpg, wmf, emf, ico, cur). Image je vÜak mnohem ·sporn∞jÜφ (co se t²Φe zabφrßnφ pam∞ti), proto₧e nenabφzφ funkce pro prßci s obrßzkem. Dßle m∙₧e PictureBox fungovat jako ControlContainer. Proto budete-li chtφt pouze zobrazovat obrßzky, je nejlepÜφ pou₧φt Image, kter² se vßm odvd∞Φφ rychlejÜφ pracφ a menÜφmi pam∞¥ov²mi nßroky. JedinΘ, co chybφ PictureBoxu oproti Image, je schopnost p°izp∙sobit obrßzek velikosti prvku.
Image nabφzφ udßlosti pro myÜ. Pro p°izp∙sobovßnφ velikosti obrßzku slou₧φ vlastnost Stretch
. Je-li nastavena na True
m∞nφ obrßzek svou velikost podle velikosti prvku. Po₧itφm vlastnosti BorderStyle
nastavφte zdali se mß nebo nemß zobrazovat okraj. Pro urΦenφ zobrazovanΘho obrßzku slou₧φ stejn∞ jako u PictureBoxu vlastnost Picture
. V design time se vßm zobrazφ standardnφ okno, ve kterΘm zvolφte po₧adovan² soubor. V p°φpad∞, ₧e obrßzek urΦujete a₧ za b∞hu, je nutnΘ pou₧φt funkci LoadPicture
, kterß nahraje obrßzek do pam∞ti.
Set Image1.Picture = LoadPicture("C:\WINDOWS\InstalaΦnφ program.bmp")
Set PictureBox1.Picture = LoadPicture("C:\WINDOWS\InstalaΦnφ program.bmp")
V p°φpad∞ ₧e budete chtφt obrßzek ulo₧it pou₧ijet p°φkaz SavePicture
.
SavePicture Image1.Picture, "C:\WINDOWS\TEMP\tmp1.bmp"
SavePicture PictureBox1.Picture, "C:\WINDOWS\TEMP\tmp2.bmp"
PictureBox nabφzφ udßlosti pro myÜ i klßvesnici, dßle pak s t∞ch d∙le₧it∞jÜφch LostFocus, GotFocus a Resize
. Se vÜemi t∞mito vlastnostmi jsme se ji setkali, tak₧e je nenφ t°eba vφce popisovat. PictureBox umo₧≥uje m∞nit zobrazovan² obrßzek pomocφ n∞kolika vlastnostφ a metod, kterΘ jsou vÜak spoleΦnΘ pro vφce prvk∙ a proto budou posßny a₧ v nßsledujφcφch kapitolßch.
DalÜφm Prvkem kter² si zde popφÜeme je PictureClip. Jeliko₧ se nejednß o vnit°nφ souΦßst, VB je nutnΘ tuto komponentu p°idat (jak na to, najdete v minul²ch dφlech. Jen pro up°esen∞nφ, najdete ji pod nßzvem Micsrosoft PictureClip Control). Tento prvek slou₧φ k zobrazenφ v²°ezu z obrßzku. Takto je mo₧nΘ ulo₧it n∞kolik obrßzk∙ v jednΘ bitmap∞, a z tΘ v programu zobrazovat vy°ezy s jednφm obrßzkem. Jsou dva zp∙soby jak vy°φznout po₧adovan² obrßzek. Prvnφ mo₧nost je zφskat v²°ez "ruΦn∞". V druhΘm p°φpad∞ lze za urΦit²ch podmφnek tento proces automatizovat. Uvedeme si p°φklad, v n∞m₧ budeme ob∞ metody ilustrovat. Vlo₧te na formulß° jeden PictureBox nastavte vlastnost Index
na 0. Na formulß° umφst∞te dv∞ tlaΦφtka. Prvnφ s titulkem "1. Metoda" a druhΘ s titulkem "2. Metoda". Jako poslednφ umφst∞te na formulß° PictureClip.
Private Const ColsAndRows = 3
Private Sub Command1_Click() '1. Metoda
Dim SaveMode As Integer
Dim tmpWidth As Long, tmpHeight As Long
'V²poΦet Üφ°ky a v²Üky v²°ezu
tmpWidth = PictureClip1.Width \ ColsAndRows
tmpHeight = PictureClip1.Height \ ColsAndRows
'Uklßdß p∙vodnφ nastavenφ m∞°φcφch jednotek
SaveMode = Picture1(i).ScaleMode
'Nastavuje m∞°φcφ jednotky na pixely
Picture1(i).ScaleMode = 3
'Nastavuje do jakΘ velikosti se mß v²°ez p°izp∙sobit
PictureClip1.StretchX = Picture1(i).ScaleWidth
PictureClip1.StretchY = Picture1(i).ScaleHeight
'Obnovφ p∙vodnφ m∞°φcφ jednotky
Picture1(i).ScaleMode = SaveMode
For i = 0 To ColsAndRows ^ 2 - 1
'Nastavuje sou°adnice v²°ezu
PictureClip1.ClipX = tmpWidth * (i Mod ColsAndRows)
PictureClip1.ClipY = tmpHeight * (i \ ColsAndRows)
'Nastavuje velikost v²°ezu
PictureClip1.ClipWidth = tmpWidth
PictureClip1.ClipHeight = tmpHeight
'Zobrazuje v²°ez v PictureBoxu
Picture1(i).Picture = PictureClip1.Clip
Next
End Sub
Private Sub Command2_Click() '2. Metoda
Picture1(i).ScaleMode = 3
SaveMode = Picture1(i).ScaleMode
PictureClip1.StretchX = Picture1(i).ScaleWidth
PictureClip1.StretchY = Picture1(i).ScaleHeight
Picture1(i).ScaleMode = SaveMode
'Nastavenφ poΦtu sloupc∙ a °ßdk∙
PictureClip1.Cols = ColsAndRows
PictureClip1.Rows = ColsAndRows
For i = 0 To ColsAndRows ^ 2 - 1
Picture1(i).Picture = PictureClip1.GraphicCell(i)
Next
End Sub
Private Sub Form_Load()
For i = 0 To ColsAndRows ^ 2 - 1
'Nahraje prvek do pole prvk∙ a zobrazφ jej
If i <> 0 Then Load Picture1(i)
Picture1(i).Visible = True
'Nastavφ sou°adnice nahranΘho PictureBoxu
Picture1(i).Move Picture1(i).Width * (i Mod ColsAndRows), _
Picture1(i).Height * (i \ ColsAndRows)
Next
'Nahraje obrßzek do PictureClipu
Set PictureClip1.Picture = LoadPicture("C:\WINDOWS\InstalaΦnφ program.bmp")
End Sub
12.3. Metody a vlastnosti pro kreslenφ
Pomocφ metod formulß°e, tiskßrny nebo n∞kter²ch dalÜφch prvk∙ m∙₧eme kreslit. Narozdφl od p°φpadu ,kdy pou₧ijeme prvky, nem∙₧eme se znovu na nakreslenΘ objekty obracet a m∞nit jejich vlastnosti. Jestli₧e vÜak nevy₧adujeme tuto schopnost, je vhodn∞jÜφ pou₧φt metod. Pro ovlivn∞nφ vlastnostφ kreslen²ch objekt∙ se vyu₧φvß vlastnostφ objektu, na kter² se vykresluje.
Nastavujφ se t°i vlastnosti pro barvy. ForeColor
nastavuje barvu, kterß bude pou₧ita pro vykreslenφ textovΘho Φi grafickΘho objektu. BackColor
urΦuje pozadφ na kterΘm budou objekty vykresleny. FillColor
urΦuje barvu v²pln∞ objekt∙. S tφmto souvisφ vlastnost FillStyle
, kterß urΦuje typ v²pln∞ (vertikßlnφ Φßry, horizontßlnφ Φßry atd.). Pro nastavovßnφ barev se pou₧φvß model RGB. S nφm souvisφ i stejnojmennß funkce se t°emi parametry RGB(red, green, blue)
, kterß slou₧φ k p°ehledn∞jÜφmu nastavovßnφ barev. Pro kompatibilitu s d°φv∞jÜφmi dobami (Visual Basic for MS-DOS) je zde jeÜt∞ funkce QBColor(color)
, kterß nabφzφ v²b∞r z 16 barev (0-15) a vracφ RGB barvu.
DalÜφmi vlastnostmi, kterΘ ovliv≥ujφ vzhled vykreslovan²ch objekt∙ jsou DrawStyle
a DrawWidth
. Prvnφ nastavuje typ Φßry (teΦkovanß, p°eruÜovanß) ovÜem p°i nastavenφ vlastnosti druhΘ na hodnotu jinou ne₧ 1 se m∙₧ete s teΦkovan²mi i p°eruÜovan²mi Φarami rozlouΦit. Poslednφ dv∞ vlastnosti CurrentX
a CurrentY
p°edstavujφ jakΘsi sou°adnice grafickΘho kurzoru. Ten urΦuje vykreslovacφ bod pro dalÜφ grafick² prvek, nejsou-li ovÜem jeho vykreslovacφ sou°adnice nastaveny na pevno. V p°φpad∞, ₧e pot°ebujeme vyΦistit t°eba pokreslen² formulß°, pou₧ijeme metodu Cls.
[objekt.]Line [Step] (x1, y1) [Step] - (x2, y2), [barva], [B[F]]
Vykreslφ Φßru na prvek objekt
. KlφΦovΘ slovo Step
urΦuje, ₧e sou°adnice uvedenΘ za nφm jsou relativnφ a jsou vzta₧eny k sou°adnicφm grafickΘho kurzoru. (x1, y1) a (x2, y2)
jsou sou°adnicemi poΦßteΦnφho a koneΦnΘho bodu Φßry. Poslednφ parametr nabφzφ dv∞ mo₧nosti: B a BF. Prvnφ znamenß, ₧e mφsto Φßry bude vykreslen obdΘlnφk s uveden²mi sou°adnicemi, kter² bude vypln∞n v zßvislosti na nastavenφ vlastnostφ FillColor
a FillStyle
. Druhß mo₧nost znamenß, ₧e obdΘlnφk bude pln∞ vypln∞n.
Line (1000, 1000)-(1000, 2000)
Line Step(0,0)-(2000, 2000)
Line (2000, 2000)-Step(0, -1000)
Line Step(0, 0)-Step(-1000, 0)
Line (1200,1200)-Step(600, 600), , B
Line (1400,1400)-(1600, 1600), , BF
[objekt.]Circle [Step] (x, y), polom∞r, [barva], [zaΦßtek], [konec], [pom∞r]
Vykreslφ kru₧nici nebo elipsu na prvek objekt
. KlφΦovΘ slovo Step
mß stejn² v²znam jako u Line. (x, y)
jsou sou°adnice st°edu a polom∞r
je logicky a jednoduÜe polom∞r. Parametry zaΦßtek
a konec
urΦujφ poΦßtek a konec kruhovΘ v²seΦe. Standardn∞ jsou tyto parametry nastaveny na 0 a 2*PI. Poslednφ parametr pom∞r
, se pou₧φvß k vykreslenφ elipsy. Jeto pom∞r mezi osou b (rovnob∞₧n² s osou X) a osou a (rovnob∞₧nß s osou y).
Circle (1000, 1000), 1000
Circle Step(0, 0), 1000, , , , 0.5
Circle Step(0, 0), 1000, , , , 2
[objekt.]Point(x, y) [objekt.]PSet [Step] (x, y), [barva]
Metoda Point
vracφ RGB barvu bodu danΘho sou°adnicemi na prvku objekt
. V p°φpad∞, ₧e je vrßcena hodnota -1, jsou sou°adnice mimo rozsah. Metoda PSet
vykreslφ bod v dan²ch sou°adnicφch.
[object.]Print [seznam]
Slou₧φ pro vypsßnφ textu na objekt
. Parametr seznam
je soupis libovoln²ch textov²ch Φi numerick²ch v²raz∙, funkcφ Spc(n)
a Tab(n)
, pomocn²ch znaΦek ";
" a ",
". UvedenΘ funkce lze pou₧φt pouze s p°φkazem Print
. UvedenΘ funkce vlo₧φ uveden² poΦet znak∙ a to bu∩ mezer, v p°φpad∞ funkce Spc(n)
, nebo sloupc∙, v p°φpad∞ Tab(n)
(v tomto p°φpad∞ ovÜem na nov² °ßdek). PomocnΘ znaΦky urΦujφ pozici, na kterou bude vlo₧en nßsledujφcφ v²raz. Jestli₧e pou₧ijeme st°ednφk, objevφ se dalÜφ text ihned za posledn∞ vypsan²m. ╚ßrka slou₧φ jako tabulßtor.
For i = 0 To 25
Print Tab(i); Chr(65 + i); Spc(26 - i); Chr(90 - i)
Next i