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