3.1 Proměnné - teorie
3.2 Proměnné - praxe
3.3 Změna vlastností prvků s použitím proměnných
3.4 Konstanty
3.5 Náhodná čísla a zaokrouhlování
3.6 PictureBox
3.7 Domácí úkol
3.8 V příští lekci
3.1 Proměnné - Teorie
Proměnná je hodnota, která se řídí určitými pravidly, například, že číselná proměnná nemůže obsahovat text a podobně, nebo třeba proměnná, která má definovaný počet dvou desetinných čísel, jich nemůže mít deset. Proměnná tedy může mít libovolné hodnoty, které ovšem musí projít pravidly. Ta jsou následující:
Typ
Účel
Velikost
Rozsah
Boolean
Logický
2 bajty
True, False
Byte
Číslený
1 bajt
0 - 255
Currency
Měna
8 bajtů
Obrovský rozsah, zaokrouhluje na setiny
Date
Datum a čas
8 bajtů
Ve formátu data
Decimal
Číselný
14 bajtů
+/-79 228 162 514 264 337 593 543 950 335
Double
Reálné číslo
8 bajtů
Moc a hodně desetinných míst
Error
Číslo
číslo chyby
Integer
Celočíselný
2 bajty
-32768 až +32767
Long
Dlouhý celočís.
4 bajty
víc než minus a plus 2 miliardy
Object
Odkaz na obj.
4 bajty
Single
Reálné číslo
4 bajty
3,4 na třicátou osmou
String
Text
1 bajt na znak
přes 65 tisíc znaků
Variant
Cokoliv
podle velikosti uložené proměnné
- Boolean - První zde uvedenou proměnnou je Boolean, což je hodnota, která může obsahovat pouze logickou jedničku nebo nulu, čili pravdu (true) a nepravdu (false). Tou se zatím nebudeme zabývat.
- Byte - Bajt je pro nás zajímavější hodnota, protože tu již teď můžeme využít. Ale její využití je sníženo nízkým rozsahem hodnot, zvládne jen čísla od nuly do 255 a to není moc. Ale své využití určitě najde, protože zabírá pouhý jeden bajt paměti.
- Currency - Je to už větší číslo, používané především pro měnu.
- Date - Proměnná určená pro datum a čas.
- Decimal - Decimal je číselná hodnota, která může nabývat opravdu extrémních a prakticky nevyužitelných hodnot.
- Double - Je velmi univerzální číselná proměnná, protože umožňuje používání desetinné čárky, a to ve velmi velkém rozsahu. Její využití je především ve výpočetních aplikacích. Její velikost je osm bajtů paměti, což je poměrně dost. Místa v paměti jsou pro každý z typů pamětí rezervovaná.
- Error - Popisuje typ chyby, využívám ji jen výjimečně. Za celou dobu, co pracuji v Basicu, jsem ji skoro nepotřeboval.
- Integer - Je číselná proměnná, vhodná třeba pro umístění prvků na formuláři. Nezabírá totiž mnoho místa v paměti a její využití je taky poměrně široké. Ze začátku budeme využívat především tuto proměnnou.
- Long - Je stejně jako integer celočíselný typ, ale jeho pracovní rozmezí je mnohonásobně vyšší.
- Single - Je proměnná, která je o 4 bajty nižší než double, ale i tak je její rozsah obrovský, tj. 3,4 na třicátou osmou.
- String - Je proměnná, která umožňuje ukládat text. Jeden znak zabírá jeden bajt. Jeho délka je omezena asi 65 000 znaky. To je poměrně dost na to, aby vám to stačilo.
- Variant - Je absolutně univerzální proměnná, která umožňuje ukládání číselných hodnot až do 16 bajtů a text také ve velkém. Zabírá proto hodně místa. Proto je její použití spíše výjimečné. Tak se vyvarujte jejího použití. Je také nastavena jako defaultní, tj. každá nedefinovanná proměnná je automaticky typu variant .
Dim délka As Single 'Deklarace proměnné
Private Sub Command1_Click() 'Začátek procedury
délka = Form1.Width 'Uložení do proměnné
Label1.Caption = délka 'Čtení proměnné
End Sub 'Konec procedury
Od komentáře zpět k proměnným, tedy k jejich deklaraci
- Dim - označuje typ proměnné
- délka – je v našem případě název, ale ten může být libovolný, ale nesmí v něm být speciální znaky ani mezery.
- As – znamená jako tzn. třeba proměnná délka jako Single.
- Single – místo toho však může být jakýkoliv jiný typ proměnné.
3.2 Proměnné praxe
Proměnné se ve Visual Basicu stejně jako v jiných jazycích využívají k uložení nějakých dat po určitou dobu. Než je ale začneme používat, tak vám ukážu, jak pracovat s TextBoxem. TextBox je prvek, který umožňuje uživateli vkládat textové vstupy. Třeba věk, jméno a další. Má mnoho zajímavých vlastností. Tou, která je u něj podstatná, je vlastnost Text. Do ní se vpisuje text. Další zajímavou vlastností je PasswordChar. Pokud je v kolonce této vlastnosti nějaký znak, tak se vámi psaný text zobrazuje jako tento znak. Pokud je vlastnost MultiLine nastavena na true, tak můžete do TextBoxu psát na více řádků. Vlastnost MaxLenght určuje maximální délku obsahu ve znacích. Locket je vlastnost, pomocí které můžeme uživateli zakázat do TextBoxu vpisovat. Totéž jde pomocí vlastnosti Enabled, ta ovšem zároveň způsobí zašednutí TextBoxu, což v případě Locked nehrozí. Dále vlastnost Font a potom barvy písma a pozadí. Další už nejsou tak důležité anebo jsou popsány v minulé lekci. V kódu se jmenuje Text1 – Textn, n je libovolné číslo. Lepší je pojmenovávat si prvky po svém. Zde je kód, ve kterém si ukážeme využití jak proměnných, tak TextBoxu.
Dim císlo As Double ‘Deklarace proměnné
Private Sub Command1_Click() ‘Procedura kliknutí na první tlačítko
císlo = Text1.Text ‘Obsah TextBoxu se uloží do proměnné císlo
End Sub
Private Sub Command2_Click()‘Procedura kliknutí na druhé tlačítko
Text1.Text = císlo ‘vložení obsahu proměnné do TextBoxu
End Sub
To byl jednoduchý příklad, jak používat proměnné, jak do nich ukládat a jak z nich číst. Nyní si ještě ukážeme deklaraci proměnné v jedné proceduře.
Private Sub Command1_Click()
Dim a As String
a = Text1.Text
Text2.Text = a
End Sub
Private Sub Command2_Click()
Text2.Text = a
End Sub
V tomto kódu je deklarovaná proměnná jen pro jednu proceduru. Pokud klikneme na tlačítko „Command1“, tak se obsah textového pole „Text1“ zkopíruje přes proměnnou „a“ do textového pole „Text2“. Pokud ale stiskneme tlačítko Command2, tak se textové pole Text2 vyprázdní, a to z toho důvodu, že proměnná „a“ je deklarovaná jen v proceduře „Command1_Click“, to znamená, že její obsah byl zachován pouze v proceduře Command1_Click, ale v proceduře Comand2_Click už deklarovaná není. A i kdyby byla, tak by opět byla nulová, protože by byla deklarovaná pro každou proceduru zvlášť. Pokud ale kód upravíte, aby vypadal takto:
Dim a As String
Private Sub Command1_Click()
a = Text1.Text
Text2.Text = a
End Sub
Private Sub Command2_Click()
Text2.Text = a
End Sub
pak je deklarována proměnná společně pro obě procedury. Pokud stisknete tlačítko Command1, opakuje se to, co v minulém kódu, ale obsah proměnné zůstává zachován. Pokud nyní stiskneme tlačítko Command2, tak se tato proměnná přesune do Text2.
3.3 Změna vlastností prvků s použitím proměnných
Nyní vytvoříme program, který podle uživatele změní titulek okna formuláře.
Dim puvodni As String
Private Sub Command1_Click()
puvodni = Form1.Caption
Form1.Caption = Text1.Text
End Sub
Private Sub Command2_Click()
Form1.Caption = puvodni
End Sub
Private Sub Form_Load()
Text1.Text = ""
End Sub
Formulář pro tento kód by mohl vypadat asi takto. Tato jednoduchá hračička dokáže změnit titulek okna na vámi zadaný text a po stisknutí tlačítka zpět se vrátí předchozí název. Jak vidíte, není to nic složitého, je to jen pár řádků kódu. Podobně se dají třeba měnit umístění objektů na formuláři a další.
3.4 KonstantyKonstanty jsou pravým opakem proměnných. Proměnné mohou nabývat různých hodnot, narozdíl od toho konstanta má jen jednu, a to stálou hodnotu. Jednou takovou konstantou je třeba „pí“. Definice konstanty vypadá takto:
Const pi As Double = 3.141592654
Konstanta ve VB se musí ihned inicializovat, nejde jí přidělit hodnotu až časem jako proměnné, i z logického hlediska je to nesmysl. Konstanty se využívají sice spíš výjimečně, ale přece si najdou své využití. Konstanty se volají stejně jako proměnné i se stejně používají s tím rozdílem, že z nich jde pouze číst, ale nemůžeme do nich zapisovat.
Text2.text = pi / 2
Tímto jednoduchým kódem si v TextBoxu zobrazíme poloviční hodnotu „pí“
3.5 Náhodná čísla a zaokrouhlování
Generování náhodných čísel je poměrně důležité, bez něj se mnohá odvětví programování neobejdou. Asi nám jeho absence nebude vadit při tvorbě kancelářských aplikací, ale třeba při hrách je jeho absence nepředstavitelná. Náhodné číslo nám generuje zkratka Rnd, její využití je jako samotné k ničemu, většinou se doplňuje nějakým výpočtem. Jeho hodnota je vždy menší než nula. Tzn. třeba 0.456928 atd. Nyní nastala chvíle, abych upozornil, že ve Visual Basicu se nepoužívají desetinné čárky, ale desetinné tečky. Pokud ale chceme získat celé číslo třeba v jednotkách, je potřeba ono náhodné číslo vynásobit desíti a potom zaokrouhlit. Na zaokrouhlování se využívají dvě funkce, které fungují (pro kladná čísla) obě úplně stejně a to Fix() a Int(). Do jejich závorek se dává zaokrouhlované číslo nebo častěji proměnná. Pokud chceme získat čísla v řádu desítek, tak násobíme stem a pak zaokrouhlíme. Funkce Int má jednu zajímavost, a to, že zaokrouhluje vždy dolů. Tzn. že 4.99 zaokrouhlí na 4.
a = Int(Rnd * 10)
Tímto kódem si generujeme celá čísla od 0 do 9, pokud bychom chtěli třeba čísla od 1 do 10, museli bychom přičíst jedničku. Třeba takto:
a = Int(Rnd * 10) + 1
Nebo takto:
a = Int(Rnd * 10)
a = a + 1
To je tedy poměrně jednoduché a dá se to rozepsat na několik řádků, pro snadné pochopení třeba takto:
a = Rnd
a = a * 10
a = Int(a)
a = a + 1
Z tohoto kódu krásně vyplývá, jak pracovat s proměnnými, za použití pouze jedné. To by bylo stručně něco málo o náhodných číslech. Ještě bych mohl dodat, že pokud chcete získat náhodné číslo menší než tři, tak stačí :
a = 3 * Rnd
A tento jednoduchý kód vytiskne náhodná čísla od 5 do 15:
Private Sub Form_Click()
nejmensi = 5
nejvetsi = 15
vysledek = ((nejvetsi - nejmensi) * Rnd) + nejmensi
Print vysledek
End Sub
Tohle už je víceméně o logice než o programování, ale vyzkoušejte si, co se dá dělat pomocí náhodných čísel a uvidíte. Pokud následující program spustíte víckrát, můžete si všimnout jedné zajímavosti, totiž že náhodná čísla jsou vždy ve stejném pořadí, což je výhodné pro ladění programu. Různost náhodných čísel se dá napravit textem Randomize Timer. Kód potom může vypadat třeba takto:
Private Sub Form_Click()
Randomize Timer
Print Rnd
End Sub
Náhodná čísla tak budou opravdu náhodná.
3.6 PictureBox
Dost už bylo čísel a proměnných. Teď si naše programy oživíme trochou obrázků, a to pomocí PictureBoxu, ale ten nebudu zatím probírat příliš do hloubky, ale zmíním se jen o jeho základních vlastnostech. Tou bezpochyby nejdůležitější je vlastnost Picture, která udává jeho obsah, tedy jméno obrázku, který bude obsahovat. Obsahuje taktéž procedury, jako je click a podobně, takže se dá využít jako tlačítko. Tím můžete zlepšit grafické rozhraní vašeho programu, a to do značné míry. Tento prvek má obrovský rozsah použití, který si ale nechám na později.
3.7 Domácí úkol
Nastal konec trápení s lekcí, teď vás potrápím domácím úkolem. Zadání zní vytvořit program, který vypočítá obvod kruhu s libovolným náhodným poloměrem o velikosti 1 až 100, který bude zokrouhlen na desetiny. Použijete konstanty, proměnné, náhodná čísla a TextBoxy na zobrazení výsledku. Zobrazte jak poloměr, tak i obvod. A udělejte to tak, aby to hezky vypadalo. Vypracované úlohy odevzdávejte jako čistý kód bez formulářů.
3.8 V příští lekci
V příští lekci nás čekají: objekt timer a podmínky, bez kterých by byl VB téměř nepoužitelný. Řekneme si, co je to MessageBox a v čem nám může být dobrý, a ukážeme si jak vyrobit jednoduchou kalkulačku.