4.1 Podmínka If Else
4.2 Užitečné
4.3 Timer
4.4 MessageBox
4.5 Kalkulačka
4.6 Domácí úkol
4.7 V příští lekci
4.1 Podmínka If Else
Podmínky jsou prakticky tím, co nám umožňuje programovat. Bez podmínek by nebylo prakticky možné vytvořit smysluplnou aplikaci. Nyní si povíme o základním druhu podmínek, to je podmínka If Else. Může mít několik způsobů zapsání, a to podle použití.
If a = b Then 'podmínka, která musí být splněna, aby se vykonal příkaz
Text1.Text = a 'příkaz podmínky
End If 'ukončení podmínky
Tento zápis znamená: když „a“ se rovná „b“, pak Text1.Text = a. Pokud podmínka splněná není, potom se pokračuje bez provedení příkazu. Ukončení podmínky čili End If musí být zapsáno vždy, kromě podmínky psané na jeden řádek, ta vypadá takto:
If a = b Then Text1.Text = a
Podmínky tohoto typu na plnohodnotné programování nestačí, proto je tato podmínka rozšířená o ElseIf a Else. Tady máme drobnou ukázku použití.
Private Sub Form_Click()
If a = b Then
Text1.Text = a
ElseIf a = b + 3 Then
Text1.Text = a + 7
ElseIf a = b - 1 Then
Text1.Text = b
Else
Text1.Text = "chyba"
End If
End Sub
Když se „a“ rovná „b“, tak se v textovém poli „Text1.Text“ objeví hodnota proměnné „a“. Když ne, tak se pokračuje druhou podmínkou, a pokud je splněno, že „a“ se rovná „b“ plus 3, pak se v textovém poli „Text1.Text“ objeví hodnota proměnné „a“ plus 7. Pokud se nesplní ani tato podmínka, pokračuje se další, a pokud se nesplní ani ta, tak se vykoná „else“, to znamená, že pokud není splněna žádná podmínka, tak se splní tato. Pokud není „else“ obsažena, prostě se pokračuje dále v kódu. Pokud se splní jakákoliv podmínka, na další už se nehledí a přeskočí se za „End If“, tedy konec podmínky if. To by tedy bylo k teorii a teď se podíváme na operátory. Nemusíte používat jen rovná se, je tu třeba i :
= rovno
< menší
> větší
>= větší nebo rovno
<= menší nebo rovno
<> nerovná se
To by tedy byly základní operátory. Pomocí nich už se dá udělat ledacos.
Ukážeme si drobný příklad využití:/p>
Dim Vek As Byte
Dim Reakce As String
Private Sub Command1_Click()
Vek = Text1.Text
If Vek > 100 Then
Reakce = "už tu nemáš co dělat"
ElseIf Vek > 50 Then
Reakce = "užívej života, moc času ti nezbývá"
ElseIf Vek > 20 Then
Reakce = "jsi v nejlepších letech"
ElseIf Vek > 15 Then
Reakce = "jen by mě zajímalo, kolikrát už jsi ztratil občanku"
ElseIf Vek > 6 Then
Reakce = "to už možná chodíš do školy"
ElseIf Vek <= 6 Then
Reakce = "takovej prcek"
Else
Reakce = "asi jsi udělal něco blbě"
End If
Label1.Caption = Reakce
End Sub
Třeba tahle drobná ukázka okomentuje váš věk a krásně vypovídá o tom, jak se dají využít proměnné, podmínky i operátory. Nyní vám ukážu tentýž kód bez proměnných, není to žádný problém, ale uvidíte, jak vám proměnné dokážou zjednodušovatt práci.
Private Sub Command1_Click()
If Text1.Text > 100 Then
Label1.Caption = "už tu nemáš co dělat"
ElseIf Text1.Text > 50 Then
Label1.Caption = "užívej života moc času ti nezbývá"
ElseIf Text1.Text > 20 Then
Label1.Caption = "jsi v nejlepších letech"
ElseIf Text1.Text > 15 Then
Label1.Caption = "zajímalo by mě, kolikrát už jsi ztratil občanku"
ElseIf Text1.Text > 6 Then
Label1.Caption = "to už možná chodíš do školy"
ElseIf Text1.Text <= 6 Then
Label1.Caption = "takovej prcek"
Else
Label1.Caption = "asi jsi udělal něco blbě"
End If
End Sub
Následující text je možná na výšku kratší, ale počet znaků je vyšší a hlavně je s ním mnohem horší manipulace, a pokud chcete uložit nějaké číslo někam, kde by třeba nemuselo být vidět, tak je na to proměnná optimální. Samozřejmě se na to „dá“ použít nějaký objekt, třeba TextBox a jeho viditelnost, tedy vlastnost Visible nastavíte na False. Ale ta představa, že pracujete se stovkou proměnných vás od tohoto řešení určitě odradí.
4.2 Užitečné
Zde jsou některé jednoduché příkazy, které jsou vcelku užitečné:
Beep - Pípnutí kdekoliv, když potřebujete pípnout.Cls - Vymaže z formuláře prvky vypsané metodou Print nebo vykreslené metodou Line, kterou se budeme zabývat v některé z následujících kapitol.
End - Tímto jednoduchým příkazem napsaným v kódu můžete spuštěný program vypnout.
Exit Sub - Pokud program narazí na tento příklad, tak proceduru přeruší a vrací se tam, odkud byla procedura volána.
4.3 Timer
Timer je objekt velmi důležitý, a to především schopností vykonávat určité příkazy v časových intervalech. Má jen několik málo vlastností, které vám přes jejich nízký počet nepopíšu všechny. První vlastností je jméno name, druhá je potom Enabled, pokud je na False, tak Timer nepočítá, pokud je na True tak ano. Dále nás bude zajímat vlastnost Interval, již z jejího názvu vyplývá, že se jedná o čas mezi vykonáním kódu obsaženého v proceduře Timer1.timer. Ten se udává v milisekundách, jedna sekunda se rovná 1000 milisekund. Teoreticky to znamená, že tento prvek je schopen vykonat kód 1000 za sekundu. V praxi je to ovšem nemožné, protože pokud si představíte třeba stránku kódu, obsaženého v Timeru, jeho zpracování může trvat třeba i několik vteřin. Interval tedy udává dobu od toho, co se zpracoval kód, až po dobu, kdy se začne zase opakovat. Teď si tedy ukážeme, jak bude vypadat prográmek, který nás bude informovat o délce své činnosti. Vložíme si jeden TextBox a jeden Timer na formulář a poklikneme na formulář a vepíšeme následující kód:
Private Sub Form_Load()
Timer1.Interval = 1000
Text1.Text = 1
End Sub
Private Sub Timer1_Timer()
Text1.Text = Text1.Text + 1
End Sub
Po spuštění programu se zavedou hodnoty do vlastností objektů a každou vteřinu se vám zvýší text v TextBoxu o jednu. To je poměrně jednoduché. Teď něco jiného. Prohlédněte si následující kód, zapněte si reproduktory, zkuste si ho pustit.
Private Sub Form_Click()
Timer1.Interval = 1000
Beep
End Sub
Private Sub Timer1_Timer()
If Timer1.Interval > 51 Then _
Timer1.Interval = Timer1.Interval - 50
Beep
End Sub
S tímto prvkem se dají dělat mnohé zajímavé věci, omezené jen vaší tvořivostí nebo tím, co ještě neznáte. Vše je potřeba procvičovat a zkoušet. Nyní se pusťme do další zajímavé a vcelku použitelné věci, a tou je MsgBox
4.4 MessageBox
MessageBox, zkráceně MsgBox, je formulář, který nás většinou o něčem informuje. Pokud jste více či méně spokojenými zákazníky Microsoftu, určitě znáte hlášky o chybách (např. výjimka na adrese #0006456FF511 počítač se asi ztratí), nebo ony otázky, zda si jste jisti, že chcete smazat soubor či složku. To vše je MsgBox. MsgBox má několik módů zobrazení, ten základní je jen s tlačítkem OK, v dalších jsou v nabídce tlačítka Ano a Ne, Storno a další. Volání MsgBoxu není nijak složité. Stačí napsat:
MsgBox "Katastrofální chyby - asi se něco stane", _
vbOKOnly, "Chyba jak Brno"
Text v prvních uvozovkách je text zobrazený na MsgBoxu. Text mimo uvozovky, zde vbOKOnly označuje mód zobrazení MsgBoxu. Poslední text s uvozovkami udává Titulek okna. Zde jsou některé z možností módů.
MsgBox "Zpráva uživateli", Konstanta + Konstanta, "Titulek"
MsgBox "ahoj", vbCritical + vbYesNo, "nic"
První je konstanta zobrazeného obrázku a druhá tlačítek.
Tlačítka
Konstanty
Jen tlačítko OK (Výchozí)
vbOKOnly
OK a Storno
vbOKCancel
Ano, Ne, Storno
vbYesNoCancel
Přerušit, znovu, ignorovat
vbAbortRetryIgnore
Ano, Ne
vbYesNo
Znovu, Storno
vbRetryCancel
Zobrazí ikonu křížku
vbCritical
Zobrazí ikonu otazníku
vbQuestion
Zobrazí ikonu vykřičníku
vbExclamation
Zobrazí ikonu informace
vbInformation
S takovou by nám ale MsgBox byl celkem nanic, protože tímto způsobem zápisu z něj nemůžeme získávat informace o stisknutém tlačítku. Je tedy hezké, že uživateli nabídneme zda ano či ne, ale k čemu nám to bude, když nebudeme vědět, co udělal. Proto je potřeba tyto informace odněkud získat. To se provádí následujícím kódem. Je ale potřeba zavést si proměnnou.
Dim a As Byte
Private Sub Form_Click()
a = MsgBox("Katastrofální chyby - asi se něco stane", _
vbOKOnly, "Chyba jak Brno")
End Sub<
Každé tlačítko má svou hodnotu, tyto hodnoty jsou zapsány v následující tabulce.
OK
1
Storno
2
Přerušit
3
Opakovat
4
Pokračovat
5
Ano
6
Ne
7
Jelikož už znáte kód odpovědi, tak váš program může různě reagovat na reakce uživatele, např. takto
Private Sub Form_Click()
a = MsgBox("Chcete program vypnout hned", vbYesNo, "Vypínání...")
If a = 6 Then End
End Sub
MsgBox využívá velké množství programů, tak proč ho nevyužít také? Například při ukládání anebo při různých úpravách nastavení programu.
4.5 Kalkulačka
Na tohle se ale určitě těšíte nejvíc, tj. na to, že uděláte program, který by byl alespoň k něčemu. Tak tedy k té napodobenině kalkulačky. Připravte si formulář, na který umístíte dva TextBoxy, jeden Label a pět tlačítek. Může vypadat třeba takto:
Tento prográmek bude fungovat tak, že do každého TextBoxu napíšeme číslo a stisknutím tlačítka se provede vyznačená matematická operace, třeba při stisknutí „/“ se první číslo vydělí druhým a výsledek se zobrazí v Labelu. Po stisknutí tlačítka OFF se nám zobrazí MsgBox a ten se nás zeptá, jestli chceme program ukončit. Kód:
Private Sub Command1_Click()
Label1.Caption = Val(Text1.Text) + Val(Text2.Text)
End Sub
Private Sub Command2_Click()
Label1.Caption = Val(Text1.Text) - Val(Text2.Text)
End Sub
Private Sub Command3_Click()
Label1.Caption = Val(Text1.Text) * Val(Text2.Text)
End Sub
Private Sub Command4_Click()
Label1.Caption = Val(Text1.Text) / Val(Text2.Text)
End Sub
Private Sub Command6_Click()
off = MsgBox("Chcete program ukončit", _
vbYesNo, "Vypínání...")
If off = 6 Then End
End Sub
Ještě vám vysvětlím použití „Val()“. Tento příkaz z jakékoliv proměnné určitým způsobem vybere hodnotu číselné proměnné. Při početních úkonech je velmi vhodné jeho použití. Zkuste si tento prográmek trochu upravit podle sebe. Ať si vyzkoušíte, co umíte.
4.6 Domácí úkol
Znáte Timer, znáte podmínky, znáte MsgBox, tak toho všeho využiji a za úkol vám dám vytvořit program, který po spuštění ohlásí pomocí MsgBoxu, že se za 30 vteřin vypne nebo jestli jej chcete vypnout sami, a pokud ne, tak se po třiceti vteřinách ohlásí opět MsgBoxem, že čas vypršel a po odklepnutí dialogu se zavře. Ale to není vše, posledních pět vteřin tento program každou vteřinu pípne.
4.7 V příští lekci
se podíváme na další typy podmínek, na cykly, k MsgBoxu si přidáme jeho kolegu InputBox a podíváme se na práci s proměnnými, a to převážně s textovými a vůbec na práci s textem.