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