× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

VB - 5. lekce

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-kubec-milan-a-vera/ ]Google [ ?rel=author ]       15. 4. 2005       28 753×

5.1 InputBox
5.2 Kalkulačka s využitím InputBoxu a Podmínek
5.3 Cykly For Next
5.4 Cykly Do Loop
5.5 Podmínky Select Case
5.6 Práce s textem a zřetězování proměnných
5.7 Domácí úkol
5.8 V další lekci
..

5.1 InputBox

InputBox je prvek podobný MsgBoxu, ale ten na rozdíl od něj vyžaduje od uživatele nějaká vstupní data. Může vypadat třeba takto:


Private Sub Form_Click()
  a = InputBox("Zadejte prosím vaše jméno", _ 
"dotaz číslo 1", "Ignác Hruškovič", 0, 0)
  Print a
End Sub

Takto podobně může vypadat nějaký InputBox. Hodnota z InputBoxu se v našem případě po odkliknutí přemístí do proměnné a. První z údajů v závorce nám udává, jaký bude text v InputBoxu, druhý udává jeho titulek a třetí defaultní (výchozí) hodnotu, v našem případě je to jméno pana Ignáce Hruškoviče (pan Hruškovič je tam z toho důvodu, že Nováky už nemám rád). Tuto hodnotu můžete buď ponechat, anebo změnit. Další dvě hodnoty, tedy ty nuly, určují souřadnice zobrazení InputBoxu v twipech. Hodnoty se oddělují čárkou, a pokud používáte MS Visual Studio a umíte trochu anglicky, tak vám tento program i radí, co kam napsat. Pokud by byl nějaký dotaz, zeptejte se v poradně, protože opravdu neumím vše vysvětlit naprosto dokonale, jen takhle v textu. Myslím, že dále je zbytečné pokračovat s výkladem tohoto prvku, a tak se pustím do další části. Tou bude trocha procvičování.


5.2 Kalkulačka s využitím InputBoxu a Podmínek.


Private Sub Command1_Click()
  a = InputBox("Zadejte číslo","Kalkulačka","0", 3000, 3000)
  b = InputBox("typ operace, kterou chcete provést pro sčítání 1, _ 
pro odečítání 2, pro násobení 3, pro dělení 4", "Kalkulačka", "1", 3000, 3000)
  c = InputBox("Zadejte druhé číslo", "Kalkulačka", "0", 3000, 3000)
  If b = 1 Then MsgBox (Val(a) + Val(c))
  If b = 2 Then MsgBox (Val(a) - Val(c))
  If b = 3 Then MsgBox (Val(a) * Val(c))
  If b = 4 Then MsgBox (Val(a) / Val(c))
  If MsgBox("Chcete kalkulačku vypnout ?", vbYesNo, "kalkulačka") = 6 Then End
End Sub

Začal jsem přímo kódem, ten si pozorně přečtěte a prostudujte a podívejte se, co program dělá a jak vlastně funguje. Myslím, že jestli jste četli pozorně všechny předchozí lekce, tak by neměl být problém tento příklad pochopit. Pokud by to problém byl, tak si pozorně znovu přečtěte předchozí lekci. A vše si vyzkoušejte. Další možností je potom využití poradny.


5.3 Cykly For Next

Cyklus For Next je prvním typem cyklu. Je to cyklus, nad kterým máme absolutní kontrolu. Počítá od jednoho čísla, které zadáme, až do druhého zadaného čísla a ještě si můžeme zvolit, po jakých krocích chceme postupovat. To znamená, že můžeme třeba od čísla 10 postupovat k číslu 22 po třech. Cyklus se nám tedy provede pětkrát. Tento typ využití není příliš vhodný pro cykly, u kterých chceme, při každém opakování cyklu, provést přesně totéž, třeba jen třikrát vypsat pozdrav.
Ale pokud provádíme operace, u kterých jsou jejich výsledky závislé na počtu provedení, pak je tento cyklus nutný. Třeba při úpravách obrázků a tak. Nebo pokud chcete cykly, jejichž počet provedení závisí na uživateli. Zde je ukázka:


Private Sub Form_Click()
  For i = 0 To 40 Step 1   ' Step 1 není nutné psát, je implicitní
    Print i
  Next
End Sub

Čísla nemusí být celá, především to platí pro číslo za Step (krokování nebo něco na ten způsob), to znamená, že třeba zápis:


Private Sub Form_Click()
  For i = 0 To 3 Step 0.2
    Print i
  Next
End Sub

způsobí, že cyklus se bude opakovat patnáctkrát.

Nyní se podíváme na praktičtější využití, než je vypisování čísel na formulář jako v předchozím případě. Uděláme si program, který nám s použitím InputBoxů a MsgBoxů vypočte průměr z několika čísel. Jejich počet bude záviset výhradně na uživateli, ale bude omezen počtem 255, hodnota zadávaných čísel bude prakticky libovolná. Takže zde je kousek kódu.


Dim number As Byte
Dim cislo As Double
Dim soucet As Double

Private Sub Form_Load()
  number = InputBox("Zadej počet průměrovaných čísel", _ "Průměr", "2")
  For i = 1 To number Step 1
    cislo = InputBox("Zadej císlo", "Průměr", _ "0")
    soucet = soucet + cislo
  Next i
  MsgBox (soucet / number), vbOKOnly, "Průměr"
  End
End Sub

Doufám, že jste pochopili cyklus For Next. Ještě bych rád dodal, že pokud se nějakým způsobem potřebujete dostat ven z cyklu For Next ještě před jeho normálním ukončením, tak se dá kdekoliv použít příkaz Exit For.


5.4 Cykly Do Loop

Teď se pustíme do dalšího typu cyklů. Tento typ je o něco jiný, provádí se tak dlouho, dokud není splněna nějaká podmínka, a pokud tato podmínky není splněna vůbec, tak tento nenápadný cyklus zahltí váš procesor, zasekne sám sebe a někdy i celý systém. Proto je s ním potřeba pracovat opatrně a vždy udělat kód, který je schopen tento cyklus opustit. Kód vypadá velmi jednoduše, ale má několik možností zápisu a podle nich se taky trochu liší funkcí.


a = 1
Do While a = 10
  a = a + 1
  Print a
Loop

Když „a“ = 10, pak se provede cyklus a od loop se vrací k do a podmínka se zkontroluje znovu a tak pořád dokola, dokud se „a“ bude rovnat 10. Pokud se „a“ nerovná 10, pak se pokračuje za sekvencí Loop.


a = 1
Do
a = a + 1
Print a
Loop While a = 10

Tento kód je skoro stejný jako první, ale podmínka je až u loop. To znamená, že cyklus ze začne provádět až k loop, u loop se zkontroluje, zda proměnná a je 10, pokud ano, tak se program vrátí k Do a provádí cyklus znova. Pokud ne, tak se pokračuje dál v provádění kódu. To tedy znamená, že tento cyklus se provede vždy minimálně jednou.


a = 1
Do Until a = 10
a = a + 1
Print a
Loop

Slovíčko While se zde změnilo na Until a to je jeho pravý opak, to znamená, že cyklus se bude provádět dokud se „a“ nebude rovnat 10. Pokud a nabude hodnotu 10, pak cyklus skončí a pokračuje se další částí kódu nebo se čeká na reakci uživatele.


a = 1
Do
a = a + 1
Print a
Loop Until a = 10

Zde je stejná změna jako u ukázky s While, takže je zde opět ta možnost, že se kód provede minimálně jednou.

Jelikož jsou vody cyklu Do Loop zrádné a nezřídka se jim podaří zaseknout váš program takzvanou nekonečnou smyčkou, tak jsou zde dvě drobné vychytávky, které nás od toho aspoň částečně mohou uchránit Jsou to dvě následující sekvence:

Exit Do Pokud na tento příkaz program narazí někde ve smyčce Do Loop, pak tuto smyčku okamžitě opustí, aniž by pokračoval v kódu, který obsahuje, ale pokračuje dál za smyčkou.

DoEvents Dá systému čas na vlastní práci a zabrání zaseknutí programu nebo dokonce systému. Má využití především při složitějších početních úkonech. Vkládá se normálně kamkoliv do kódu, jeho podrobnější použití vysvětlím až časem. Pokud tedy máte smyčku, která se má provést třeba 1000x, tak se vám zcela určitě zahltí systém, pokud tedy nepřičítáte tisíckrát jedna nebo podobnou jednoduchost. Tak je vhodné tento příkaz vložit vždy na začátek nebo na konec smyčky, pokud jsou to opravdu složité kódy, tak se vkládá třeba třikrát, ale k tomu se asi ani nedostaneme.


5.5 Podmínky Select Case

Cyklů by pro dnešek asi stačilo, tak se vrátíme k podmínkám, tentokrát to bude podmínka Select Case. Tato podmínka je navržena pro větší množství různých možností než podmínky If Else. Její kód je pro velké množství porovnání mnohem přehlednější. A zde je drobná ukázka.


Dim vek As Byte
Private Sub Form_Click()
  vek = Text1.Text
  Select Case vek
    Case Is = 0, 1, 2, 3, 4, 5, 6
      Print "Si ještě špunt"
    Case Is < 15
      Print "Eště nemáš občanku"
    Case Is <= 18
      Print "Už máš občanku"
    Case Is = 20, 21, 22
      Print "Ježiš už"
    Case Is > 22
      Print "tak to už si starej :)))"
  End Select
End Sub

Na tomto případě je vidět, že se vyplatí použít, narozdíl od If Else je i přehlednější, ale neříkám, že je lepší. Každá má své plusy a i své minusy a své využití. Zde je zajímavou věcí třeba možnost oddělování pomocí čárek, můžete tedy porovnávat více čísel najednou, čísla mohou být nahrazena také proměnnými. Nemusíme tedy používat pouze konstantní hodnoty, ale můžete využít i různých hodnot, vytvořených v průběhu používání programu.


5.6 Práce s textem a zřetězování proměnných

Práce s textem a s proměnnými bude naše téma. Nyní si probereme, jak se s textem dělají základní operace, jako je jeho zřetězení nebo zjištění jeho délky a mnoho dalších věcí. Zřetězení je velmi používané, třeba pokud chcete vytisknout něčí jméno na formulář ve větě. Třeba vaše jméno je Karel IV. Takže uživatel zadá jméno do InputBoxu a formulář vytiskne jeho jméno ve větě, a abych to ukázal ještě názorněji a připojil i podmínky Select Case, tak přidáme i věk.


Dim Vek As Byte
Dim Meno As String
Dim Roky As String

Private Sub Form_Click()
  Meno = InputBox("Jak se menuješ", _ 
"Osobní údaje", "nevím")
  Vek = InputBox("Kolik je ti let", _ 
"Osobní údaje", "20")
  Select Case Vek
    Case Is = 1
      Roky = "rok"
    Case Is = 2, 3, 4
      Roky = "roky"
    Case Is > 4
      Roky = "let"
  End Select
  Print "Jmenuješ se " & Meno & _ " 
a jsi " & Vek & " " & Roky & "  starý"
End Sub

Tento kód, tedy spíš jeho předposlední řádek, je ukázkou zřetězování. Znak & musí být z obou stran oddělen mezerou, je to znak zřetězení. To není vše, co se dá s textem dělat. V následující tabulce jsou některé další funkce pro práci s textem.


Typ Co dělá Vstup Výstup
Asc Vrací ASCII Asc("k") 107
Chr Vrací znak z ASCII Chr(78) N
InStr Vyhledá počátek řetězce v jiném řetězci InStr( "Monitor","or") 6
LCase Převede řetězec na malá písmena LCase("Monitor") monitor
Left Vrací určitý počet znaků zleva Left("Monitor", 3) Mon
Len Vrací délku řetězce Len("Monitor") 7
Like vrací logickou hodnotu False, True
Mid Vrací určený počet znaků od určité pozice Mid("Monitor", 3, 3) nit
Right Vrací určený počet znaků zprava Right("Monitor", 5) nitor
String Opakuje první znak slova String(3, "Monitor") MMM
UCase Převede písmena na velká UCase("Monitor") MONITOR

V tabulce je zmínka o tabulce ASCII. Co to je? Je to tabulka znaků, které používáme, je jich maximálně 256. Každý znak má své číslo a každé číslo má svůj znak. Jak je uvedeno v tabulce, tak třeba znak velké „N“ má číslo 78. Zkuste si každou z těchto funkcí vyzkoušet, ale vyhněte se funkci Like, kterou budu později probírat podrobněji.


5.7 Domácí úkol

Dnes budou úkoly celkem kreativní a budou dva. První úkol bude chtít vaše osobní data a pak vám je vrátí ve větách. Pomocí funkcí pro práci s textem vám zobrazí i vaše iniciály. Pro skloňování použijete podmínek Select Case a údaje budete zadávat do InputBoxů. Ale výsledek nebude v MsgBoxu, ale na formuláři vytištěn metodou Print. A ještě využijete poslední tabulky a zobrazíte opět ve větě počet znaků vašeho jména, a kromě těchto věcí si přidejte tři vlastní osobní údaje.

Druhý úkol bude čistě na vás, ale předvedete mi v něm používání cyklů, může to být cokoliv. A pokud si troufnete a znáte hru očko a dovedete ji zpracovat tak, aby ji mohl hrát jeden proti počítači, tak o sobě budete moci říci, že máte první funkční a použitelný program ve VB. Přeji vám mnoho úspěchů  a nezapomeňte na náhodná čísla. Už se těším, až si zahraji první očko, věřte není to nic složitého.

Pravidla očka: Hraje libovolný počet hráčů s 32 kartami, karty mají hodnotu eso = 11, desítka = 10, devítka = 9, osmička = 8, sedmička = 7, král = 4, dáma = 3, spodek = 2. Vyhraje ten, kdo nasbírá na ruku 21, nebo dvě esa, nebo se přiblíží svým součtem nejblíže 21. Kdo nakoupí přes 21, ten prohrává.


5.8 V další lekci

se podíváme na prvky ComboBox, ListBox, horizontální a vertikální ScrollBar. Přidáme si i prvky CheckBox a OptionButton, a aby toho nebylo málo a abychom to měli v celku, tak ještě Frame.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005041507-vb-5-lekce/ ].