Serißl - 6. dφl
Grafika

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


12. Grafika

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φ.

Zp∞t na obsah


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

Zp∞t na obsah


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.

Zp∞t na obsah


12.3.1. Line

[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

Zp∞t na obsah


12.3.2. Circle

[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

Zp∞t na obsah


12.3.3. Point a PSet

[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.

Zp∞t na obsah


12.3.4. Print

[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

Zp∞t na obsah