- Katedra technické a informační výchovy PdF UP v
Transkript
UNIVERZITA PALACKÉHO PEDAGOGICKÁ FAKULTA KATEDRA TECHNICKÉ A INFORMAČNÍ VÝCHOVY Tvorba výukového software v jazyce VISUAL BASIC (Navazuje na studijní text: Základy programování v jazyce Visual Basic) PhDr. MILAN KLEMENT OLOMOUC 2002 OBSAH 11 Práce s časem a datem………………………………………………………. 1 12 Práce se selektivními položkami…………………………………………….. 5 13 Práce s cykly………………………………………………………………… 9 14 Práce s animovanými objekty……………………………………………….. 13 15 Práce s textovými poli……………………………………………………….. 17 16 Ovládání Wordu a Excelu z Visual Basicu………………………………….. 22 17 Ovládání Internet Exploreru z Visual Basicu……………………………….. 26 18 Shrnutí - výukový program ČEŠTINA……………………………………… 30 Tento text je určen především posluchačům Pedagogické fakulty Univerzity Palackého v Olomouci jako podpůrný materiál pro výuku předmětu „Tvorba výukového software“. Jednotlivé kapitoly jsou věnovány řešení praktických příkladů. Na začátku každé kapitoly je vždy uvedena problematika, která je vysvětlována pomocí vytváření konkrétní aplikace čtenářem tohoto textu. Vytváření jednotlivých aplikací je popsáno způsobem „krok za krokem“ a umožňuje čtenáři osvojení jednotlivých teoretických znalostí, ale též i konkrétních dovedností a poznatků. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 11 PRÁCE S ČASEM A DATEM Práce s údaji pro datum a čas Interně je pro proměnnou typu Date alokováno 8 bajtů paměti, které obsahují spakovaný vzorek bitů nejen pro datum, ale i pro přesný čas. Při tisku proměnné typu Date se objeví řetězec obsahující měsíc, den, rok, hodinu, minutu a sekundu, kterou tato interní osmibajtová data reprezentují. Přesný formát zobrazených nebo vytištěných údajů pro datum a čas je závislý na místních nastaveních operačního systému. Ve všech vzorových výpočtech, které následují, pak předpokládám, že hodnoty pro datum a čas jsou vždy uloženy v proměnné typu Date. Naplnění datové proměnné Chcete-li pro proměnné typu Date zadat přímo hodnoty pro datum a čas, uzavřete příslušnou informaci mezi dva znaky #. Při zadávání programového řádku s údajem data v tomto formátu provede Visual Basic kontrolu syntaxe. Pokud jsou datum nebo čas zadány nesprávně, nebo jsou použity neexistující hodnoty, ihned se objeví chybové hlášení. Dále uvádíme příklad, v němž proměnnou D typu Date naplníme konkrétní hodnotou data a času. Dim d as Date d = #11/ 7/ 03 8:00 PM# Tímto byla proměnná d, která je typu Date naplněna uvedeným výchozím datem. Pokud chceme zjistit aktuální systémový čas můžeme použít dvou funkcí: Now a Time. Dále je uveden příklad jak můžeme deklarovanou proměnnou naplnit aktuálním systémovým časem. Dim d as Date d = Now Příklad pro práci s časem a datem Až dokončíme tuto lekci budeme mít k dispozici následující aplikaci, která bude zobrazovat aktuální čas a datum. Také bude schopna vypočítat skutečný věk ve dnech, podle data narození. Obr. 1 Aplikace Práce s časem 1) Vytvoření uživatelského rozhraní Spusťte aplikaci Visual Basic a potvrďte vytvoření standard EXE aplikace. Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 1 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Obr. 2 Uživatelské rozhraní aplikace Práce s časem Ovládací prvek Nastavení vlastností Funkce Form 1 Frame 1 Caption: Práce s časem Caption: Výpočty s datem narození Forecolor: červená Caption: Aktuální datum a čas Forecolor: červená Text: (vymazat nápis Text 1) Alignment: 2 - Center Text: (vymazat nápis Text 2) Alignment: 2 - Center Caption: Stáří ve dnech: Formulář aplikace. Kontejner prvků sloužících pro výpočet skutečného stáří podle data narození ve dnech. Frame 2 TextBox 1 TextBox 2 Command 1 Label 1 Label 2 Label 3 Timer 1 Caption: Datum narození: Font: velikost 14 a tučně Forecolor: zelená Font: velikost 8 a tučně Forecolor: modrá Enabled: True Interval: 10 (čas v milisekundách) Kontejner prvků pro zobrazení skutečného data a času. Slouží pro zadání data narození. Slouží pro zobrazení stáří ve dnech. Slouží pro provedení výpočtu skutečného věku ve dnech. Slouží k popisu ovládacího prvku Text 1. Slouží k zobrazení aktuálního systémového času. Slouží k zobrazení aktuálního systémového data. Slouží pro aktivace příkazů pro práci s časem. aktivace 2) Výpočty s datem narození S údajem o datu je možné přímo manipulovat a provádět normální matematické operace, musíte jen pamatovat na to, že základní jednotkou je den. Můžete tak velmi snadno vytvořit aplikaci, která spočítá vaše stáří ve dnech, tak jak to vidíte na obrázku 1. Stačí, když jednoduše odečtete vaše datum narození (uložené v proměnné typu Date) od funkce Now, která vrací aktuální datum. Ovládacímu prvku Command1 přiřadíme následující kód: Private Sub Command1_Click() Dim a As Integer Dim b As Date On Error GoTo chyba PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 2 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy b = Text1 a = Now - b Text2 = a chyba: If Err.Number = 13 Then MsgBox ("Špatné zadání data narození"), , "Chyba zadání" End Sub Zachycení chyby číslo 13 ošetřuje stav, kdy uživatel nezadá platný formát data narození, nebo jej nezadá vůbec. Toto ošetření vyvolá prvek MsgBox, který je uveden na dalším obrázku. Obr. 3 Chybové hlášení aplikace Práce s časem 3) Zobrazení aktuálního času Poklepejte na ovládací prvek Timer1. Dojde k vytvoření události Timer1_Timer. Tato událost se aktivuje vždy když nastane vlastnost Interval (ta je nastavena na 10 milisekund). To znamená, že je ovládacím prvek zjištěn systémový čas každých 10 milisekund. Pokud by byla hodnota jiná, například 2000 byl by systémový čas zjišťován každé 2 sekundy a čas by nebyl zobrazován průběžně. Celý kód tedy vypadá následovně: Private Sub Timer1_Timer() Label2.Caption = Time End Sub Příkaz Time zajistí zobrazení aktuálního systémového času ve vybraném intervalu. Rozdíl mezi příkazem Time a Now spočívá v tom, že příkaz Now zjistí aktuální čas a datum pouze jednou, kdežto příkaz Time tak činí neustále. 4) Zobrazení aktuálního data Abychom byli schopni pomocí ovládacího prvku Label3 zobrazovat i aktuální datum je nutné předchozí proceduru doplnit do následující podoby: Private Sub Timer1_Timer() Dim c As Date Label2.Caption = Time PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 3 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy c = Now d = Day(c) e = Month(c) f = Year(c) Label3 = "Den " & d & " Měsíc " & e & " Rok " & f End Sub Příkaz Day slouží pro zobrazení aktuálního dne z proměnné c, která je typu Date. Příkaz Month slouží pro zobrazení aktuálního měsíce z proměnné c, která je typu Date. Příkaz Year slouží pro zobrazení aktuálního roku z proměnné c, která je typu Date. Následně již stačí zobrazit zjištěné hodnoty pomocí znakového řetězce v ovládacím prvku Label3. údaje zapsané v uvozovkách jsou statické (jsou přidány mezery mezi uvozovky, aby se jednotlivé číselné a textové údaje nezobrazovali bezprostředně za sebe), znak & slouží pro spojení jednotlivých číselných a textových údajů do jednoho řetězce. Tipy pro zdokonalení aplikace • Pokuste se o úplné zobrazení výpisu aktuálního data v ovládacím prvku Label3 pomocí příkazů: Hour (hodina), Minute (minuta), Second (sekunda) a WeekDay (víkend). • Pokus se upravit aplikaci tak, aby dopočítávala počet chybějících dní do určitého data. To provedete tak, že zadáte do proměnné typu Date pevné datum a čas a odečtete jej od funkce Now. • Zamyslete se nad tím, proč je proměnná a s předchozího příkladu typu Integer. Co se stane, pokud by byla jiného typu? Proč nefunguje výpočet počtu dní pod rok 1914? PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 4 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 12 PRÁCE SE SELEKTIVNÍMI POLOŽKAMI Konstanty a proměnné jsou nejjednodušší instance daného datového nebo objektového typu, který musí být určen explicitně nebo implicitně. Datový typ určuje způsob datové reprezentace prvku v paměti a způsob interpretace této hodnoty. Ve Visual Basicu je k dispozici dvanáct základních datových typů (Boolean, Byte, Currency, Date, Decimal, Double, Integer, Long, Object, Single, String a Variant). Kromě nich lze definovat vlastní datové typy. Objektové typy se zavádějí ve Visual Basicu pro objekty, s nimiž se v něm pracuje. S jejích pomocí lze deklarovat jednotlivé instance. Existují obecné objektové typy z nich odvozené i objektové typy definované v modulech tříd. Procedury jsou posloupnosti příkazů Visual Basicu, volání metod objektů nebo jiných procedur. Aplikace je rozčleněna do procedur a kromě nich se v ní mohou vyskytovat už jen deklarační moduly. Výrazy jsou to kombinace funkcí, operátorů, proměnných a konstant, které se vyhodnotí na hodnotu některého datového typu. Přihlašování uživatelů V této úloze, která se také potřebuje téměř v každé aplikaci se seznámíte se šablonami formuláře a uvidíte, jak se zařídí, aby psané heslo nebylo vidět. V kódu se seznámíte s rozhodovací konstrukcí, která umožňuje rozčlenit běh programu na několik větví. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 4 Aplikace Hesla 1) Vytvoření uživatelského rozhraní Založte nový projekt, odstraňte z něho výchozí formulář (klepněte pravým tlačítkem na formuláři v Průzkumníkovi projektu a z místní nabídky zvolte Remove). Zvolte Project, Add Form, vyberte šablonu Log In Dialog a stiskněte Otevřít. Zvolte Project, Properties, na kartě General vyberte Startup Object název přihlašovacího formuláře (v našem příkladu má název frmLogin1) a stiskněte OK. Obr. 5 Karta Obecného dialogového okna Vlastnosti projektu PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 5 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 6 Uživatelské rozhraní aplikace Hesla Ovládací prvek Nastavení vlastností Funkce Form 1 Label 1 Caption: Přihlášení uživatele Caption: &Jméno: (znak & potrhne první písmeno) Caption: &Heslo: (znak & potrhne první písmeno) Name: jmeno Name: heslo PasswordChar: * (bude místo znaků zobrazovat znak *) Name: cmdOK Caption: OK Name: cmdCANCEL Caption: Cancel Formulář aplikace. Slouží k popisu ovládacího prvku Text1. (dále textboxu upravíme jméno na jmeno). Slouží k popisu ovládacího prvku Text2. (dále textboxu upravíme jméno na heslo). Slouží pro zadání uživatelského jména. Slouží pro zadávání uživatelského hesla. Label 2 Text1 Text2 Command 1 Command 2 Slouží pro potvrzení uživatelského jména a hesla. Slouží pro zrušení uživatelského jména a hesla. 2) Vytvoření procedury pro tlačítko cmdOK Otevřete okno kódu a upravte proceduru cmdOK_Click. Upravené řádky jsou v následujícím výpisu kurzívou, z kódu jsem odstranil původní komentáře pocházející ze šablony: Ovládacímu prvku cmdOK přiřadíme následující kód: Private Sub cmdOK_Click() Dim navrat As String navrat = Kontrola (jmeno, heslo.Text) If "Špatně" <> navrat Then uspech = True Me.Hide MsgBox navrat, , "Pozdrav oprávněnému uživateli" Else MsgBox "Heslo je nesprávné", , "Zpráva neoprávněnému uživateli" jmeno.Text = "" heslo = "" jmeno.SetFocus End If End Sub PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 6 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Kontrola je veřejná funkce, kterou si napíšete do standardního modulu. Funkce vrací řetězec pozdravu, který se zobrazí uživateli, když se přihlásí správně. Jinak se napsané hodnoty vymažou, metodou SetFocus se aktivuje pole pro jméno uživatele, který musí napsat oba údaje znovu. 3) Vytvoření modulu s procedurou Kontrola Zvolte Project, Add modul a napište do modulu tělo funkce Kontrola zhruba v těchto intencích: Public Function Kontrola(jmeno As String, heslo As String) As String Select Case jmeno & "" & heslo Case "Tomáš" & "tomas" Kontrola = "Vítáme tě do systému - Tomasi" Case "Josef" & "pepa" Kontrola = "Vítáme tě do systému - Pepo" Case "František" & "franta" Kontrola = "Vítáme tě do systému - Franto" Case Else Kontrola = "Špatně" End Select End Function Programová konstrukce Select Case umožňuje rozvětvit běh programu na jednotlivé případy (Case). Pokud nevede na True ani jeden z případů, provedou se příkazy ve větvi Case Else, která by neměla chybět nikdy, pokud případy Case nevyčerpávají opravdu kompletně množinu všech možných hodnot. 4) Vytvoření vlastního formuláře, ke kterému se hlásíme Zvolte Project, Add Form, vyberte šablonu About Dialog a stiskněte Otevřít. Do projektu se přidá další formulář, který se jmenuje frmAbout. Na obrázku jej vidíte: Obr. 7 Formulář frmAbout PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 7 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 5) Kódy které nás přihlásí k formuláři frmAbout Aby se po zdárném přihlášení uživatele k aplikaci zobrazil formulář frmAbout musíme proceduru cmdOk_Click doplnit o další řádek kódu (je napsán tučně) Private Sub cmdOK_Click() Dim navrat As String navrat = Kontrola(jmeno, heslo.Text) If "Špatně" <> navrat Then uspech = True Me.Hide MsgBox navrat, , "Pozdrav oprávněnému uživateli" frmAbout.Show Else MsgBox "Heslo je nesprávné", , "Zpráva neoprávněnému uživateli" jmeno.Text = "" heslo = "" jmeno.SetFocus End If End Sub Pokud vše správně naprogramujete, tak by jste měli vidět následující postup přihlašování (podle jmen a hesel v příkazech Select Case: Ok → Ok → nebo pokud je špatné jméno či heslo: Ok ← Tipy pro zdokonalení aplikace • Pokuste se o vytvoření takového přihlašovacího formuláře, kdy bude počet chybných přihlášení limitován. • Pokus se upravit aplikaci tak, aby dopočítávala čas potřebný k přihlášení. Například aby po uplynutí 15 vteřin od spuštění aplikace, pokud nebude zapsáno uživatelské jméno a heslo, systém uživatele upozornil na vyčerpaný časový limit. • Zamyslete se nad tím, proč je skrytí přihlašovacího formuláře reprezentováno příkazem Me.Hide – jak by šel tento kód nahradit? PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 8 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 13 PRÁCE S CYKLY Cykly For...Next slouží v procedurách událostí k provádění určité skupiny příkazů po pevný, předem daný počet opakování. Cyklus For...Next má proto smysl například při provádění několika spolu souvisejících výpočtů, při práci s elementy na obrazovce nebo při zpracování určité množiny vstupních dat. Cyklus For...Next je tedy ve skutečnosti pouze jistou zkratkou namísto zápisu dlouhého seznamu programových příkazů. V tomto dlouhém seznamu bychom zapisovali určitý počet skupin příkazů, které by prováděly v podstatě totéž; ve Visual Basicu proto nadefinujeme uvedenou skupinu příkazů jen jednou a řekneme, že se tyto příkazy mají provést po určitý počet opakování. Syntaxe cyklu For...Next vypadá takto: For proměnná = začátek To konec opakované příkazy Next proměnná V tomto syntaktickém zápisu příkazu For...Next jsou přitom For, To a Next povinná klíčová slova. Povinný je rovněž operátor rovná se (=). Namísto slova proměnná dosadíme jméno číselné proměnné, která bude sledovat aktuální počet opakování cyklu; začátek a konec jsou číselné hodnoty (výrazy), které definují zahájení a ukončení cyklického výpočtu. Řádek nebo řádky mezi příkazy For a Next již tvoří instrukce, které se mají opakovat při každém vykonání cyklu. Následující cyklus For...Next například na formulář vypíše následující textové řetězce ale vždy o 1 bod větším fontem (vlastnost FontSize) Obr. 8 Cyklus For…Next v praxi Private Sub Command1_Click() For i = 1 To 4 FontSize = 10 + i Print "Řádek"; i Next i End Sub Uvedený cyklus je funkčně ekvivalentní čtyřnásobnému zápisu textového řetězce Řádek, ale vždy o 1 bod větším fontem. Zobrazení čítače pomocí metody Print Proměnná čítač funguje v proceduře události stejně jako každá jiná proměnná. Můžeme ji tedy přiřazovat do vlastností, používat ve výpočtech jako součást výrazů nebo ji v programu zobrazovat. Jednou z nejšikovnějších technik pro zobrazení čítače je volání metody Print. Metoda Print představuje jistý speciální příkaz, který zobrazuje výstup na formuláři nebo jej vytiskne na připojenou tiskárnu (viz. obr 8). Volání metody Print má následující syntaxi: Print výraz kde výraz je proměnná, vlastnost, textová hodnota nebo číselná hodnota (výraz) vypočtená v proceduře. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 9 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Vytvoření aplikace Teploty V následujícím cvičení budeme pracovat s jednorozměrným veřejným polem Teploty, do kterého zaznamenáme nejvyšší denní teploty pro každý den sedmidenního týdne. Program tak ukazuje, že v poli o pevné velikostí můžeme snadno zpracovat množinu příbuzných hodnot. Jednotlivé teploty budeme do pole přiřazovat pomocí funkce InputBox, kterou voláme v cyklu For...Next. Na elementy pole se v cyklu odkazujeme pomocí čítače cyklu. Nakonec voláme v dalším cyklu metodu Print, pomocí níž zobrazíme obsah pole na formuláři; současně vypočteme a zobrazíme průměr zadaných nejvyšších teplot. V této úloze, která se také potřebuje téměř v každé aplikaci kde se pracuje se vstupními hodnotami se seznámíte s prvkem InputBox, který slouží pro zadávání hodnot pro výpočty. Prvek InputBox je inverzním prvkem k prvku MsgBox. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 9 Aplikace Teploty 1) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 10 Uživatelské rozhraní aplikace Teploty Ovládací prvek Nastavení vlastností Funkce Form 1 Command 1 Command 2 Caption: Teploty Caption: &Zadej teploty (znak & slouží k potržení prvního písmene a tím k využití kláves ALT + K) Caption: &Zobraz teploty Command 3 Caption: &Konec Formulář aplikace. Slouží vyvolání vstupního pole InputBox a tím k zadávání maximálních teplot v jednotlivých dnech. Slouží pro zobrazení jednotlivých teplot a výpočtu průměrné teploty v deném týdnu. Ukončí běh aplikace. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 10 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Jestliže v programu zobrazujete informace přímo na formulář pomocí metody Print, musíte vždy do vlastnosti AutoRedraw tohoto formuláře přiřadit hodnotu True. Tato hodnota znamená, že pokud formulář překryje na obrazovce jiné okno, Visual Basic jej po obnovení překreslí. 2) Vytvoření modulu pro deklaraci pole V nabídce File klepněte na příkaz Add Module a poté klepnutím na tlačítko Open vytvořte nový standardní modul, který bude obsahovat deklaraci pole. V okně kódu se objeví nový prázdný standardní modul. Do standardního modulu zapište následující příkazy: Option Base 1 Public teploty(7) As Variant Příkaz Option Base změní všem polím v programu index prvního elementu pole z nuly na jedničku. Druhý příkaz pak vytvoří veřejné pole se jménem teploty (pole bude typu Variant), které bude obsahovat sedm prvků. Pole je deklarováno jako veřejné, takže bude k dispozici v celém programu. 3) Vytvoření procedury pro zadávání teplot Uzavřete okno kódu se standardním modulem a na formuláři poklepejte na tlačítko Zadej teploty. V okně kódu se objeví procedura události Command1_Click. Do procedury události zapište následující programové příkazy, které v cyklu od uživatele vyžádají zadání údajů o teplotě a načtené hodnoty uloží do pole: Private Sub Command1_Click() Cls hlášení = "Zadej nejvyšší teplotu dne" For i = 1 To 7 titulek = "Den " & i teploty(i) = InputBox(hlášení, titulek) Next i End Sub Volání metody Cls na začátku této procedury události vymaže z formuláře veškerý vystup předchozích příkazů Print. V programu tak můžeme teploty zadávat opakovaně a na formuláři se zobrazí pouze aktuální údaje. Čítačem cyklu For...Next je proměnná i, kterou zároveň využíváme jako index načítaného elementu pole teplot. Uvedená proměnná nabývá tudíž hodnot od 1 do 7. Vstupní údaje načítáme od uživatele pomocí funkce InputBox; argumenty tvoří proměnné hlášení a titulek. 4) Vytvoření procedury pro zobrazení teplot V okně kódu otevřete rozbalovací seznam objektů a klepněte na objekt Command2. Do procedury události Command2_Click zapište následující příkazy: Private Sub Command2_Click() Dim celkem As Integer Print "Nejvyšší teploty týdne" Print For i = 1 To 7 Print "Den "; i, teploty(i) PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 11 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy celkem = celkem + teploty(i) Next i Print Print "Průměr z nejvyšších teplot: "; celkem / 7 End Sub V této proceduře události zobrazujeme na formuláři informace z pole teploty, a to pomocí metody Print. V cyklu For...Next projdeme jednotlivé elementy pole a příkazem celkem = celkem + teploty(i) vypočteme součet všech hodnot. Poslední řádek v proceduře události zobrazí průměr nejvyšších teplot, který vypočte vydělením součtu teplot a počtu dní v týdnu. 5) Vytvoření procedury pro ukončení programu V okně kódu otevřete ještě jednou rozbalovací seznam objektů a klepněte na objekt Command3. Do procedury události Command3_Click napište tento kód: Private Sub Command3_Click() End End Sub Tipy pro zdokonalení aplikace • Zamyslete se nad tím, proč je nutné proměnnou celkem deklarovat jako typ Integer a ne jako datový tip Variant? • Pokuste se daný kód cyklů zapsat pomocí cyklu typu Do. Alternativou k cyklu For...Next je cyklus typu Do. Tento cyklus provádí určitou skupinu příkazů opakovaně tak dlouho, až jistá podmínka nabude v cyklu hodnoty True. Cykly Do mají tedy smysl zejména v případech, kdy nemůžeme dopředu určit počet opakování. Cyklus Do má několik možných formátů, které se liší místem a způsobem vyhodnocení podmínky opakování cyklu. Nejobvyklejší syntaxe je: Do While podmínka blok příkazů, které se budou opakovaně provádět Loop Následující cyklus Do tak například provádí uvažované zpracování jmen, která končí zadáním textu „Konec": Do While Jméno <> "Konec" Jméno = InputBox("Zadejte jméno nebo text Konec pro ukončení.“) If Jméno <> "Konec" Then Print Jméno Loop Podmínkovým příkazem je v tomto cyklu výraz Jméno <> „Konec". Visual Basic interpretuje uvedený cyklus způsobem, který bychom mohli popsat slovy: „opakuj příkazy tak dlouho, dokud proměnná Jméno neobsahuje slovo Konec". PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 12 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 14 PRÁCE S ANIMOVANÝMI OBJEKTY Jak vytvořit indikátor průběhu Nejlepší způsob, jak se naučit pracovat s ovládacím prvkem ProgressBar, (součástí knihovny Microsoft Windows Common Controls (COMCTL32.OCX), je tvořit jednoduchou aplikaci a krok po kroku si ji vyzkoušet. Následující příklad vytváří 3minutový minutník, který se hodí při vaření vajíček na měkko a zároveň dobře demonstruje použití ovládacího prvku ProgressBar. Vytvoření aplikace Minutovník pro vaření vajec V následujícím cvičení budeme tedy pracovat s objektem ProgressBar. Proto bude nutné si jej přidat do projektu pomocí volby Components. Tu spustíte tak, že pravým tlačítkem myši kliknete na lištu se standardními objekty (Label, Command atd…), z místní nabídky vyberete možnost Components na kterou kliknete levým tlačítkem myši. Dojde k zobrazení karty Components ve které vyhledejte objekt Microsoft Windows Common Controls 5.0 (SP 2). Zaškrtněte políčko před jeho názvem a stiskněte tlačítko OK. Dojde k tomu, že k vašemu projektu se přidá několik nových objektů. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 11 Aplikace Minutovník pro vaření vajec 1) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 11 Uživatelské rozhraní aplikace Minutovník pro vaření vajec Ovládací prvek Form 1 Command 1 Label 1 ProgressBar 1 Timer 1 Nastavení vlastností Funkce Caption: Minutovník pro vaření Formulář aplikace. vajec Caption: &Start (znak & slouží Slouží spuštění aplikace. k potržení prvního písmene a tím k využití kláves ALT + K) Slouží pro zobrazení průběhu vaření vajec Alingment: 2 –Center textovým hodnocením: Vaří se… a Hotovo. Font: Velikost 14 a tučně ForeColor: červená Zobrazuje průběh vaření.. Enabled: False Aktivuje časování průběhu vaření. Interval: 1000 (údaj v milisek.) PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 13 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 2) Vytvoření deklarační části procedur Pomocí Project Exploreru, na kterém najdete tlačítko View Code se přepněte do okna pro zapisování kódů. V okně kódu se objeví nový prázdný standardní modul. Do deklarační části kódu zapište následující příkazy: Option Explicit Private start As Single Příkaz Option Explicit změní všem polím v programu index prvního elementu pole na nulu. Druhý příkaz pak vytvoří proměnnou se jménem start, která je typu Single. Protože je tento kód umístěn v dekladarční části formuláře, je proměnná start přístupná všem procedurám na formuláři. 3) Vytvoření procedury tlačítka Command1 Uzavřete okno kódu a na formuláři poklepejte na tlačítko Start. V okně kódu se objeví procedura události Command1_Click. Do procedury události zapište následující programové příkazy, které slouží pro načtení, zobrazení a naplnění jednotlivých prvků na formuláři: Private Sub Command1_Click() ProgressBar1.Value = 0 start = 0 Timer1.Enabled = True End Sub Volání metody ProgressBar1.Value = 0 na začátku této procedury události vymaže z uvedeného ovládacího prvku modré čáry průběhu vaření. Volání metody Timer1.Enabled = True dosáhneme zapnutí časovače událostí Timer1. 4) Vytvoření procedury pro prvek Timer1 Uzavřete okno kódu a na formuláři poklepejte na ovládací prvek Timer1. V okně kódu se objeví procedura události Timer1_Timer. Do procedury události zapište následující programové příkazy, které slouží pro načtením a zobrazení jednotlivých obsahú ovládacích prvků v závislosti na časovači: Private Sub Timer1_Timer() Dim procenta If start = 0! Then start = Timer End If procenta = 1000 * (Timer - start) / 180 If procenta < 100 Then ProgressBar1.Value = procenta Label1.Caption = "Vaří se..." Else ProgressBar1.Value = 100 Label1.Caption = "Hotovo !" PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 14 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Beep Timer1.Enabled = False End If End Sub 5) Úprava aplikace Minutovník pro vaření vajec I když aplikace funguje, ukážeme si jak je možné nahradit objekt ProgressBar ovládacím prvkem PictureBox. Tím vznikne „sloupcový“ postup namísto čtverečkového. Vymažte z formuláře ovládací prvek ProgressBar a to tak, že si vyvoláte jeho místní nabídku a kliknete na volbu Delete. Na formulář umístěte ovládací prvek PictureBox1. do tohoto PictureBoxu vložte další PictureBox2 jak je uvedeno na obrázku 12. Obr. 12 Upravené uživatelské rozhraní aplikace Minutovník pro vaření vajec Ovládací prvek Picture 1 Picture 1 Nastavení vlastností BackColor: bílá ScaleWidth: 100 ScaleHeight: 1 BackColor: modrá Border: 0 - None Funkce Tvoří pozadí indikátoru průběhu. Tvoří indikátor průběhu. 6) Úprava kódu tlačítka Command 1 Vytvořený kód upravte tak, jak je níže uvedeno. Tyto úpravy jsou minimální, ale záleží na jejich přesném použití. Private Sub Command1_Click() start = 0 Timer1.Enabled = True End Sub 7) Úprava kódu ovládacího prvku Timer 1 Vytvořený kód upravte tak, jak je níže uvedeno. Tyto úpravy jsou minimální, ale záleží na jejich přesném použití. Private Sub Timer1_Timer() Dim procenta If start = 0! Then start = Timer End If procenta = 1000 * (Timer - start) / 180 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 15 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy If procenta < 100 Then Picture2.Move 0,0,procenta,1 Label1.Caption = "Vaří se..." Else Picture2.Move 0,0,100,1 Label1.Caption = "Hotovo !" Beep Timer1.Enabled = False End If End Sub 8) Vytvoření nové procedury formuláře Form_Load Přepněte se do objektového zobrazení a dvakrát rychle klikněte na formulář aplikace. Aktivuje se procedura Form_Load. Do té zapište následující kód. Private Sub Form_Load Picture2.Move 0, 0, 0, 0 End Sub Tipy pro zdokonalení aplikace • Zamyslete se nad tím jak je možné využít příkaz Move pro jiné aplikace • Pokuste se daný příklad modifikovat tak, aby se zobrazovali oba indikátory posuvu na jednom formuláři.. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 16 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 15 PRÁCE S TEXTOVÝMI POLI Volání procedury Sub Volání procedury Sub je velice jednoduché: stačí v programu zapsat jméno procedury a poté seznam argumentů, které procedura Sub vyžaduje. Následující příkaz tak například představuje volání výše definované procedury PřidejJménoDoSeznamu, přičemž jako argument předáváme řetězcový literál (předáváme jej tedy hodnotou): PřidejJménoDoSeznamu "Zaremba" Podobně bychom mohli stejnou proceduru zavolat s proměnnou (kterou předáváme odkazem); upravené volání bude vypadat takto: PřidejJménoDoSeznamu NovéJméno$ V obou případech procedura PřidejJménoDoSeznamu správně přidá jméno do seznamu. Hodnotu argumentu zde uvnitř procedury nijak nemodifikujeme, takže i volání s argumentem předaným hodnotou a odkazem dává stejné (nebo podobné) výsledky. V následujícím příkladu budeme proceduru Sub volat několikrát; na první pohled zde vidíme, že si skutečně ušetříme psaní velkého množství programového kódu: PřidejJménoDoSeznamu "Zaremba" PřidejJménoDoSeznamu "Zátopek" Do NovéJménot$ = InputBox("Zadej jméno do seznamu.", "Přidáni jména") PřidejJménoDoSeznamu NovéJméno$ Loop Until NovéJméno = "" Zde tedy uživatel může do seznamu přidávat libovolný počet nových jmen. V dalším cvičení zkusíme pomocí procedury Sub ošetřit další možný typ vstupu do programu. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 13 Aplikace Rozřazení žáků do tříd PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 17 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 1) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 14 Uživatelské rozhraní aplikace Rozřazení žáků do tříd Ovládací prvek Nastavení vlastností Form 1 Label 1 Caption: Přiřazení žáků do skupin Caption: Dobří žáci Font: Velikost 8 a tučně Caption: Špatní žáci Font: Velikost 8 a tučně Text: žádny text (pole je prázdné) MultiLine: True ScrollBars: 2 – Vertical TabStop: False Locked: True Text: žádny text (pole je prázdné) MultiLine: True ScrollBars: 2 – Vertical TabStop: False Locked: True Caption: &Přidat jméno (znak & slouží k potržení prvního písmene) Caption: &Přidat jméno (znak & slouží k potržení prvního písmene) Caption: &Konec (znak & slouží k potržení prvního písmene) Label 2 Text 1 Text 2 Command 1 Command 2 Command 3 Funkce Formulář aplikace. Slouží pro popis ovládacího prvku Text 1. Slouží pro popis ovládacího prvku Text 2. Slouží pro zobrazení seznamu dobrých žáků. Slouží pro zobrazení seznamu špatných žáků. Slouží přidání jména do seznamu dobrých žáků. Slouží přidání jména do seznamu špatných žáků. Slouží pro ukončení aplikace. 2) Vytvoření modulu V nabídce Project klepněte na příkaz Add Module a poté klepněte na tlačítko Open. V okně kódu se objeví nový standardní modul. Do standardního modulu zapište následující příkazy, které tvoří proceduru PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 18 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Sub přidatjméno(skupina, návrat) hlášení = "Zadej jméno žáka skupiny " & skupina & "." nj = InputBox(hlášení, "Vkládání jmen žáků") znaky = Chr(13) + Chr(10) návrat = nj & znaky End Sub Tato obecná procedura typu Sub si nejprve pomocí funkce InputBox vyžádá od uživatele zadání jména žáka. Při svém volání přebírá dva argumenty: řetězec skupina který obsahuje označení skupina žáků, a prázdnou řetězcovou proměnnou návrat, která zpět do volající procedury události vrátí naformátované jméno zaměstnance. Před navrácením naformátovaného jména žáka připojíme k řetězci znaky nového řádku (dvojice znaků návratu vozíku a posunu válce), takže každé jednotlivé jméno se do textového pole zapíše na nový řádek. Tento postup je dosti obecný a můžete jej využít v libovolném textovém poli. 3) Vytvoření procedury tlačítka Command1 Uzavřete okno kódu a na formuláři poklepejte na první příkazové tlačítko Přidat jméno (tedy na tlačítko pod textovým polem Dobří žáci). Do procedury události Command1_Click napište následující programové příkazy: Private Sub Command1_Click() přidatjméno "Dobří žáci", zařazení1 Text1.Text = Text1.Text & zařazení1 End Sub Do volání procedury přidatjméno zde předáváme dva argumenty, z toho jeden hodnotou („Dobří žáci") a druhý referencí (zařazení1). Na druhém řádku převezmeme hodnotu z argumentu předaného referencí a přidáme ji na konec textového pole Text1. Spojení nového jména a dosavadního obsahu textového pole provádíme pomocí operátoru zřetězení (&). 4) Vytvoření procedury tlačítka Command2 V okně kódu otevřete rozbalovací seznam objektů a klepněte na objekt Command2. Do procedury události Command2_Click napište následující programové příkazy: Private Sub Command2_Click() přidatjméno "Špatní žáci", zařazení2 Text2.Text = Text2.Text & zařazení2 End Sub Tato procedura události je v podstatě stejná jako procedura události Command1_Click; do procedury přidatjméno však předává text „Špatní žáci" a nakonec aktualizuje textové pole Text2. Volané proceduře předáváme také jinou lokální proměnnou, která má vhodnější intuitivní jméno. 5) Vytvoření procedury tlačítka Command3 Ještě jednou otevřete rozbalovací seznam objektů a tentokrát klepněte na objekt Command3. Do procedury události Command3_Click napište příkaz End a okno kódu uzavřete. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 19 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy DOPLNĚNÍ CYKLŮ DO Jak se vyvarovat nekonečné smyčky Cykly typu Do jsou svojí povahou jaksi „neúnavné". Z toho vyplývá, že pro každý cyklus musíme pečlivě stanovit testovací podmínku, aby se tento cyklus mohl opravdu ukončit. Pokud se podmínkový test opakování nikdy nevyhodnotí na False, bude cyklus pokračovat donekonečna a program již nikdy nebude moci reagovat na vstup od uživatele. Uvažujme následující příklad: Do číslo = InputBox("Zadejte znamená konec.") číslo = čislo * číslo Print číslo Loop While číslo >= 0 číslo pro určeni druhé mocniny. -1 V tomto cyklu uživatel zadává jedno číslo za druhým. Program každé zadané číslo umocní na druhou a vypočtenou druhou mocninu vypíše na formulář. Uživatel však naneštěstí z programu nemůže vyskočit, i kdyby už nakrásně chtěl počítač vypnout, protože podmínka ukončení programu uvedená v nápovědě jednoduše nefunguje. Pokud totiž uživatel zadá číslo -1, program je umocní na druhou a do proměnné Číslo tak přiřadí hodnotu 1. (Problém můžeme napravit definicí jiné podmínky ukončení cyklu.) Při psaní cyklů Do si tedy musíte na takovéto nekonečné smyčky dávat pozor. Při důkladném testování programu vám ale naštěstí neuniknou. 1) Vytvoření programu pro cyklus Do Následující příklad uvádí cyklus Do, který provádí přepočet teploty ve stupních Fahrenheita na stupně Celsia. Program je velice jednoduchý: v cyklu vždy pomocí funkce InputBox vyžádá od uživatele zadání teploty, převede ji na druhou jednotku a výsledek zobrazí v okně se zprávou. Uvedený program současně demonstruje skrytí formuláře přiřazením hodnoty False do jeho vlastnosti Visible. 2) Vytvoření uživatelského rozhraní V nabídce File klepněte na příkaz New Project a poté klepněte na tlačítko OK. Visual Basic zobrazí v programovém prostředí nový, prázdný projekt. Otevřete okno Properties a do vlastnosti Visible formuláře zapište hodnotu False (Visible = False). Formulář, do jehož vlastnosti Visible jsme přiřadili hodnotu False, Visual Basic za běhu programu skryje a nebude viditelný. Tím je v podstatě za běhu programu neviditelné celé uživatelské rozhraní programu - nemůžeme zobrazit žádné objekty. Něco takového zřejmě příliš často nevyužijete; skrytí formuláře má ale smysl například tehdy, pokud má určitá část programu nebo celý program pracovat na pozadí. 3) Vytvoření programového kódu Tento program vždy pouze načte údaj ve stupních Fahrenheita a převede je na stupně Celsia, takže skrytí formuláře má smysl. Celý vstup totiž ošetříme jedním voláním funkce InputBox a výsledky zobrazíme do okna se zprávou voláním funkce MsgBox. Procedura události Form Load se provádí vždy při spuštění programu. Poklepejte na formulář. V okně kódu se objeví procedura události Form_Load. V našem programu bude obsahovat veškerý programový kód. Do procedury události zapište následující programové příkazy: Prompt = "Zadejte teplotu ve stupních Fahrenheita." Do FTemp = InputBox(Prompt, "Stupně Fahrénheita") If FTemp <> "" Then Celsius = Int((FTemp + 40) * 5 / 9 - 40) PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 20 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy MsgBox (Celsius), , "Teplota ve stupních Celsia" End If Loop While FTemp <> "" End Těchto devět řádků programového kódu provádí veškeré výpočty našeho programu. Na prvním řádku přiřadíme textový řetězec do proměnné Prompt, která poté definuje instrukci pro uživatele ve volání funkce InputBox. Cyklus Do načítá opakovaně od uživatele teplotu ve stupních Fahrenheita, převádí zadaný údaj na stupně Celsia a nakonec se zobrazuje pomocí funkce MsgBox. Cyklus se provádí tak dlouho, dokud uživatel neklepne v okně InputBox na tlačítko Cancel (Storno). Tímto tlačítkem se do proměnné FTemp vrátí prázdný řetězec. V podmínkovém testu na konci cyklu tudíž cyklus porovnává proměnnou FTemp s prázdným řetězcem. Programový pňlcaz Celsius = Int((FTemp + 40) * 5 / 9 - 40) představuje převod ze stupňů Fahrenheita na stupně Celsia. Příkaz obsahuje standardní vzorec pro převod, do proměnné Celsius však pomocí funkce Int přiřazuje pouze celé číslo bez desetinných míst. (Veškeré údaje vpravo od desetinné čárky se tedy odstraní.) Díky tomuto oříznutí hodnoty ztrácíme určitou přesnost, na druhé straně ale nikdy nedostaneme dlouhé a nepěkně vyhlížející údaje jako například 21,11111111111111 stupňů Celsia (tuto hodnotu bychom dostali převodem ze 70 stupňů Fahrenheita). PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 21 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 16 OVLÁDÁNÍ WORDU A EXCELU Z VISUAL BASICU Základy práce s programy Office Při volání metody CheckSpelling z programu napsaného ve Visual Basicu budeme postupovat podle dále uvedených základních kroků. Uvedené postupy jsou poměrně obecné a platí pro většinu aplikačních objektů, takže podle těchto zásad budete moci do programů začlenit funkce většiny aplikací, které mechanismus Automation podporují. Krok 1. Příkazem References z nabídky Project přidejte do projektu odkazy na veškeré potřebné objektové knihovny. Krok 2. Napište program ve Visual Basicu. V proceduře události, která má přímo využívat objekt mechanismu Automation, vytvořte příkazem Dim objektovou proměnnou a dále pomocí funkce CreateObject zaveďte do této objektové proměnné objekt mechanismu Automation: Dim X As Object 'X je zde jméno proměnné Set X = Create0bject("Word.Application") Krok 3. V proceduře události dále použijte odpovídající metody a vlastnosti objektu Automation; správnou syntaxi najdete v souborech nápovědy, v Object Browseru nebo v dokumentaci k objektové aplikaci: X.Visible = False X.Documents.Add X.Selection.Text = Text1.Text X.ActiveDocument.CheckSpelling Text1.Text = X.Selection.Text 'skrytí Wordu 'otevření nového dokumentu 'zkopírování pole do dokumentu 'spuštění kontroly pravopisu 'zpětné zkopírování výsledků Krok 4. Po dokončení práce s aplikačním objektem příslušnou aplikaci ukončete a objektovou proměnnou uvolněte z paměti; tím se šetří místo v paměti: X.Quit Set X = Nothing 'ukončeni Wordu 'uvolněni objektové proměnné Vytvoření osobní kontroly pravopisu V následujícím cvičení vytvoříme aplikaci, která pomocí mechanismu kontroly pravopisu v Microsoft Wordu kontroluje pravopis textu zapsaného ve Visual Basicu v textovém poli. Celý program sestavíme přímo ve Visual Basicu; funkce Microsoft Wordu budeme volat vzdáleně prostřednictvím mechanismu Automation. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 15 Aplikace Osobní kontrola pravopisu PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 22 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 1) Propojení projektu s programem Word V nabídce Project klepněte na příkaz References. Zkontrolujte, jestli je vedle odkazu na objektovou knihovnu Microsoft Word 9.0 Object Library uvedena značka zatržení, a poté klepněte na tlačítko OK. Objektová knihovna Microsoft Word 9.0 Object Library nabízí přístup k objektům, metodám a vlastnostem, které dává k dispozici objektová aplikace Microsoft Word. Odkazy na objektové knihovny musíme příkazem References přidávat do každého nového projektu explicitně. 2) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 16 Uživatelské rozhraní aplikace Osobní kontrola pravopisu Ovládací prvek Nastavení vlastností Form 1 Label 1 Caption: Osobní kontrola pravopisu Caption: Do textového pole napište jedno více slov a poté klikněte na tlačítko Pravopis Text: žádny text (pole je prázdné) MultiLine: True ScrollBars: 2 – Vertical Caption: &Pravopis (znak & slouží k potržení prvního písmene) Caption: &Konec (znak & slouží k potržení prvního písmene) Text 1 Command 1 Command 2 Funkce Formulář aplikace. Slouží pro popis ovládacího prvku Text 1. Slouží pro pravopisu zadávání slov pro kontrolu Slouží pro kontrolu pravopisu slova zapsaného v ovládacím prvku Text 1. Slouží pro ukončení aplikace. 3) Vytvoření programového kódu tlačítka Command 1 První příkazové tlačítko bude spouštět Microsoft Word a pomocí metody CheckSpelling bude kontrolovat pravopis textu v textovém poli; druhé příkazové tlačítko bude sloužit k ukončení programu. Poklepáním na tlačítko Pravopis (Check Spelling) otevřete v okně kódu proceduru události Command1_Click. Do procedury události zapište následující programový kód: Dim X As 0bject 'vytvoření objektové proměnné Wordu Set X = Create0bject("Word.Application") X.Visible = False 'skryti Wordu X.Documents.Add 'otevření nového dokumentu X.Selection.Text = Text1.Text 'zkopírování pole do dokumentu X.ActiveDocument.CheckSpelling 'spuštěni kontroly pravopisu Text1.Text = X.Selection.Text 'zpětné zkopírováni výsledků X.Quit 'ukončeni Wordu Set X = Nothing 'uvolnění objektové proměnné PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 23 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Tyto příkazy vytvoří v proceduře události objekt aplikace Word z mechanismu Automation, dále Microsoft Word spustí, nastaví určité vlastnosti objektu Word, zavolají příslušné metody Wordu a nakonec uvolní paměť, kterou objekt zabíral. Samotný Word se spustí automaticky při prvním odkazu na objektovou proměnnou. Poté pomocí vlastnosti Selection.Text Wordu zkopírujeme obsah textového pole do dokumentu Word. Při zavolání metody CheckSpelling spustí Word kontrolu pravopisu a zjistí, jestli se v textu dokumentu nacházejí nějaké pravopisné chyby. Jestliže Word nalezne chybu, objeví se dialog Spelling And Grammar který uživateli umožní oprav chyby. Word postupně kontroluje všechna slova v textovém poli, a to i když textové pole obsahuje několik řádků textu. Po dokončení kontroly se zpět do textového pole ve Visual Basicu zkopírují opravená slova a aplikace Microsoft Word se uzavře. Poslední příkaz Set na konci procedury události Commandl_Click uvolní paměť objektové proměnné. 4) Vytvoření procedury tlačítka Command2 Uzavřete proceduru události Command1_ Click a poklepejte na příkazové tlačítko Konec. Do procedury události napište příkaz End a poté okno kódu uzavřete. Tím je program pro kontrolu pravopisu hotov. VYTVOŘENÍ PROGRAMU PRO VÝPOČET HYPOTÉKY Microsoft Excel obsahuje celou řadu dosti složitých výpočtových funkcí a nástrojů datové analýzy, které dokáží významně obohatit programy napsané ve Visual Basicu. V následující rutině se pomocí rekurzivní funkce Pmt programu Microsoft Excel vypočítávají splátky hypotečního úvěru. V českém Excelu jsou jména funkcí počeštěna a funkce Pmt se jmenuje Platba. Jako vstupní údaje předáváme do programu úrokovou míru, dobu splatnosti úvěru a částku jistiny; uživatel je zadává ve Visual Basicu pomocí textových polí. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 17 Aplikace Hypotéka 1) Propojení projektu s programem Excel V nabídce Project klepněte na příkaz References. Zkontrolujte, jestli je vedle odkazu na objektovou knihovnu Microsoft Excel9.0 Object Library uvedena značka zatržení, a poté klepněte na tlačítko OK. Objektová knihovna Microsoft Excel 9.0 Object Library nabízí přístup k objektům, metodám a vlastnostem, které dává k dispozici objektová aplikace Microsoft Excel. Odkazy na objektové knihovny musíme příkazem References přidávat do každého nového projektu explicitně. 2) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 24 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Obr. 18 Uživatelské rozhraní aplikace Hypotéka Ovládací prvek Nastavení vlastností Funkce Form 1 Label 1 Label 2 Label 3 Text 1 Text 2 Text 3 Command 1 Caption: Hypotéka Caption: Úroková sazba Caption: Počet měsíců Caption: Jistina Text: žádny text (pole je prázdné) Text: žádny text (pole je prázdné) Text: žádny text (pole je prázdné) Caption: &Výpočet (znak & slouží k potržení prvního písmene) Caption: &Konec (znak & slouží k potržení prvního písmene) Formulář aplikace. Slouží pro popis ovládacího prvku Text 1. Slouží pro popis ovládacího prvku Text 2. Slouží pro popis ovládacího prvku Text 3. Slouží pro zadávání míry úrokové sazby. Slouží pro zadávání doby splatnosti . Slouží pro zadávání výšky hypotéky.. Slouží pro provedení výpočtu měsíční splátky. Command 2 Slouží pro ukončení aplikace. 3) Vytvoření programového kódu tlačítka Command 1 Zde je tedy procedura události, která vypočítá splátky hypotéky prostřednictvím Excelu: Private Sub Command1_Click() Dim xl As Object Dim platba If Textl.Text <> "" And Text2.Text <> "" _ And Text3.Text <> "" Then Set xl = CreateObject("Excel.Sheet") platba = xl.application.WorksheetFunction.Pmt _ (Text1.Text / 12, Text2.Text, Text3.Text) MsgBox "Měsíční splátka je " & _ Format(Abs(platba), "Kč#.##"), , "Hypotéka" xl.application.quit Set xl = Nothing else MsgBox "Musíte vyplnit všechny tři údaje", , "Hypotéka" End If End Sub Tato rutina nejprve vytvoří objektovou proměnnou se jménem xl a přiřadí do ní objekt Excel.Sheet. Poté prostřednictvím objektu WorksheetFunction z Excelu zavolá funkci Pmt (Platba) a vypočtenou hodnotu splátky hypotéky převede pomocí funkce Abs (absolutní hodnota) na kladné číslo. V Excelu se totiž splátky úvěrů zobrazují zpravidla jako záporná čísla (pasivní položka), na formuláři ve Visual Basicu je však budeme chtít zobrazit jako kladnou hodnotu. Pokud některý z povinných argumentů funkce Pmt (Platba) chybí, zobrazí procedura zprávu „Musíte vyplnit všechny tři údaje". PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 25 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 17 OVLÁDÁNÍ INTERNET EXPLORERU Z VISUAL BASICU Načítání dokumentů HTML ze sítě World Wide Web Pro většinu programátorů je komunikace aplikací s Intemetem velice důležitá. Minimální úroveň přístupu na Web bude nejspíše v aplikaci napsané ve Visual Basicu představovat možnost načítání souborů ze serveru na klientový počítač. Server je počítač, který v tomto případě běží někde na Intemetu a který spravuje neboli hostí webovou stránku a další služby. Klientem pak budeme rozumět jiný počítač s přístupem na Internet, který vyžaduje informace od serveru (využívá jeho služeb). Klientově požadavky na informace mohou vznikat například v programu prohlížeče, jako je Microsoft Intemet Explorer, nebo v programu napsaném ve Visual Basicu. Jestliže tedy chceme dát programu ve Visual Basicu (a tím i jeho uživateli) možnost vyžadovat informace z intemetového serveru, můžeme využít ovládací prvek ActiveX se jménem Microsoft Internet Controls, který je součástí Visual Basicu ve. Ovládací prvek Microsoft Internet Controls načítá soubory pomocí dvou nejpoužívanějších protokolů Intemetu: HTTP a FTP. Protokol HTTP se nejčastěji používá k přenosu dokumentů HTML (Hypertext Markup Language) ze serverů na Webu. Pokud webovému prohlížeči zadáme adresu, která začíná textem „http://", říkáme tím serveru, že budeme otevírat dokument s formátovacími kódy jazyka HTML a že náš prohlížeč dokáže těmto kódům správně porozumět a zobrazit je. Ovládací prvek Microsoft Internet Controls dokáže také pomocí tohoto protokolu načítat webové stránky ze serverů na Internetu. Protokol FTP se používá především pro přenos binárních souborů nebo textových souborů z různých speciálních serverů, kterým se říká servery FTP nebo lokality FT'P. Servery FTP se označují prefixem „ftp:/" před vlastní adresou počítače. V ovládacím prvku Microsoft Internet Controls můžeme buďto metodou OpenURL načíst celý soubor v jediné operaci, nebo pomocí něj můžeme přenos souboru zpracovat speciálním způsobem, bajt po bajtu pomocí příkazu Navigate. Příklad v této lekci demonstrují jednodušší z obou postupů, tedy volání metody Navigate, která načte celý soubor v jednom synchronním datovém proudu. Vytvoření spouštění Internet Exploreru s vlastním nastavením V následujícím cvičení vytvoříme aplikaci, která pomocí mechanismu Microsoft Internet Controls spouští prohlížeč Internet Explorer s přednastavenými možnostmi zobrazení. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 17 Aplikace Spouštění Internet Exploreru s vlastním nastavením PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 26 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 1) Propojení projektu s programem Internet Explorer V nabídce Project klepněte na příkaz References. Zkontrolujte, jestli je vedle odkazu na objektovou knihovnu Microsoft Internet Controls uvedena značka zatržení, a poté klepněte na tlačítko OK. Objektová knihovna Microsoft Internet Controls nabízí přístup k objektům, metodám a vlastnostem, které dává k dispozici objektová aplikace Microsoft Internet Explorer. Odkazy na objektové knihovny musíme příkazem References přidávat do každého nového projektu explicitně. 2) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 18 Uživatelské rozhraní aplikace Spouštění Internet Exploreru s vlastním nastavením Ovládací prvek Nastavení vlastností Form 1 Caption: Spouštění internet Exploreru s nastavením Caption: URL: Text: http//www.seznam.cz Caption: &Pravopis (znak & slouží k potržení prvního písmene) Caption: Status Bar Value: 1 - Checked Caption: ToolBar Value: 1 - Checked Caption: Povolit změny velikosti Value: 1 - Checked Caption: Viditelnost Value: 1 - Checked Caption: Celá obrazovka Value: 1 - Unchecked Viz. Obr 18 Text: (prázdné) Label 1 Text 1 Command 1 Check 1 Check 2 Check 3 Check 4 Check 5 Label 1 - 4 Text 2 - 5 Command 1 Funkce Formulář aplikace. Slouží pro popis ovládacího prvku Text 1. Slouží pro zadávání http adres WWW stránek. Slouží pro kontrolu pravopisu slova zapsaného v ovládacím prvku Text 1. Slouží pro přepínání zobrazení Stavového řádku okna Internet Exploreru. Slouží pro přepínání zobrazení nástrojové lišty okna Internet Exploreru. Slouží pro přepínání povolení manipulace s oknem aplikace Internet Explorer. Slouží pro přepínání viditelnosti okna Internet Exploreru. Slouží pro přepínání v celoobrazovkovém režimu zobrazení Slouží k popisu ovládacích prvků Text 2 - 5 TexBoxy jsou uspořádány takto: Text2 Text4 Text3 Text5 Caption: &Zobrazit (znak & slouží Slouží pro zobrazení editovaného okna Internet k potržení prvního písmene) Exploreru.. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 27 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 3) Vytvoření programového kódu tlačítka Command 1 První příkazové tlačítko bude spouštět Internet Exporer a pomocí metody Navigate . Poklepáním na tlačítko Zobraz otevřete v okně kódu proceduru události Command1_Click. Do procedury události zapište následující programový kód: Private Sub Command1_Click() Dim ie As New InternetExplorer ie.ToolBar = Check2.Value ie.StatusBar = Check1.Value ie.Resizable = Check3.Value ie.Visible = Check4.Value ie.FullScreen = Check5.Value ie.Navigate Text1 ie.Top = Text2 ie.Left = Text3 ie.Height = Text4 ie.Width = Text5 ie.StatusText = "Uživatelský start" End Sub Jednotlivé funkce mají následující významy: shdocvw.dll – standardně se nachází ve Windows\System. FullScreen - True jestliže chceme okno Internet Exploreru otevřít přes celou obrazovku, pokud ne, tak zadáme hodnotu False. MenuBar - True jestliže chceme zobrazit v okně Internet Exploreru hlavní nabídku, pokud ne, tak zadáme hodnotu False. Resizable - True jestliže chceme aby uživatel mohl měnit velikost okna, jinak False StatusBar - True jestliže chceme zobrazit v okně Internet Exploreru stavový řádek, pokud ne, tak zadáme hodnotu False. Toolbar - True jestliže chceme zobrazit v okně Internet Exploreru hlavní nabídku s ikonkami a řádek - adresa, pokud ne, tak zadáme hodnotu False. Visible - True jestliže chceme okno Internet Exploreru vidět, pokud ne, tak zadáme hodnotu False. Height - výška okna (v bodech) Left - vzdálenost levého okraje obrazovky od levého okraje okna (v bodech) Top - vzdálenost horného okraje obrazovky od horného okraje okna (v bodech) Width - šířka okna (v bodech) Další funkce, které je možné použít: GoBack - návrat o jednu stránku dozadu GoForward - návrat o jednu stránku dopředu GoHome - návrat na domovskou stránku Stop - zastavit aktuální proces Quit – zavřít okno PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 28 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 4) Vytvoření procedury přepínače Check 5 Uzavřete proceduru události Command1_ Click a poklepejte na příkazové přepínač Celá obrazovka, tak aby se inicializovala procedura Check5_Click. Do procedury události napište příkazy: Private Sub Check5_Click() Dim ok As Boolean ok = Check5.Value Text2.Enabled Text3.Enabled Text4.Enabled Text5.Enabled = = = = Not Not Not Not ok ok ok ok End Sub 5) Vytvoření procedury formuláře Uzavřete proceduru události Check5_ Click a poklepejte na formulář, aby se inicializovala procedura Form_Unload. Do procedury události napište příkazy: Private Sub Form_Unload(Cancel As Integer) Set ie = Nothing End Sub PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 29 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 18 SHRNUTÍ - VÝUKOVÝ PROGRAM ČEŠTINA Vytvoření aplikace Čeština V následujícím cvičení vytvoříme aplikaci, která pomocí mechanismu Clipboard (schránka) umožňuje uživateli používat myši pro práci s textovými poli. Dále budeme pracovat s proměnnými, které dokáží předávat hodnoty z jednoho formuláře na druhý. Až budete hotovi, budete mít k dispozici tento formulář: Obr. 19 Aplikace Čeština 1) Vytvoření uživatelského rozhraní Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 20 Uživatelské rozhraní aplikace Čeština PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 30 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Ovládací prvek Nastavení vlastností Form 1 Command 1 Caption: Výukový program ČEŠTINA Caption: Vyber si text, na kterém si chceš ověřit své znalosti Font: 10 tučné ForeColor: červená Caption: Tvé odpovědi Font: 10 tučné ForeColor: červená Text: Věty z knížky HONZÍKOVA CESTA Caption: Pomocí myši označ slovo, o kterém si myslíš, že je podmětem ForeColor: modrá Caption: Výsledek tvé odpovědi je: Font: 8 tučné Font: 8 tučné ForeColor: modrá Font: 14 tučné ForeColor: červená Caption: Ověř odpověď Command 2 Caption: Statistika Frame 1 Frame 2 Combo 1 Label 1 Label 2 Label 3 Label 4 Funkce Formulář aplikace. Slouží jako kontejner pro ovládací prvky Combo1, Text1 a Label1. Slouží jako kontejner pro ovládací prvky Label1 až Label4. Slouží pro zobrazení seznamu vět, ze kterých si uživatel vybírá. Slouží pro popis ovládacího prvku Text 1. Slouží k popisu ovládacího prvku Label 3. Slouží k zobrazení uživatelem označeného slova. Slouží pro zobrazení slovního hodnocení odpovědi. Slouží pro ověření vybraného slova a zobrazení slovního hodnocení odpovědi. Slouží pro zobrazení dalšího formuláře ze statistickými hodnotami. 2) Naplnění ovládacího prvku Combo 1 příslušnými větami Poklepáním na formulář Form1 otevřete v okně kódu proceduru události Form_Load. Do procedury události zapište následující programový kód: Private Sub Form_Load() Combo1.AddItem "Punťa tě hledá po návsi." Combo1.AddItem "Kufřík přece jen s vlakem neujel." Combo1.AddItem "Pod bílými vousy se dědeček usmívá." End Sub Tento kód zajistí, že při každém načtení formuláře do paměti dojde k naplnění ovládacího prvku Combo 1 příslušnými textovými řetězci. 3) Vytvoření procedury ovládacího prvku Combo1 Uzavřete proceduru události Form_Load a poklepejte na ovládací prvek Combo1, tak aby se inicializovala procedura Combo1_Click. Do procedury události napište příkazy: Private Sub Combo1_Click() Text1 = Combo1 Combo1.Visible = False End Sub PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 31 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy Tento kód (Text1 = Combo1) slouží k předání obsahu aktuálního řádku ComboBoxu do textové boxu Text1. To znamená, že pokud uživatel pomocí vybere ze seznamu jakoukoliv větu, tak se inicializuje tato procedura, která vybranou větu předá do ovládacího prvku Text1, kde se zobrazí. Další kód (Combo1.Visible = False) slouží ke skrytí ovládacího prvku Combo1, aby uživatele nemátlo, které slovo a ve kterém ovládacím prvku má vybrat. 4) Vytvoření procedury tlačítka Command 1 Uzavřete proceduru události Combo1_ Click a poklepejte na ovládací prvek Command1, aby se inicializovala procedura Command1_Click. Do procedury události napište příkazy: Private Sub Command1_Click() Dim pro As String Clipboard.SetText Text1.SelText pro = Text1.SelText Label4 = "Špatně" If Text1 = "Punťa tě hledá po návsi." And pro = "Punťa" Then _ Label4 = "Správně" If Text1 = "Kufřík přece jen s vlakem neujel." And pro = "Kufřík" Then _ Label4 = "Správně" If Text1 = "Pod bílými vousy se dědeček usmívá." And pro = "dědeček" Then _ Label4 = "Správně" If pro = "" Then Label4 = "Označ nějaké slovo" If Label4 = "Správně" Then a = a + 1 If Label4 = "Špatně" Then b = b + 1 Label3 = pro Combo1.Visible = True End Sub Jedinou novou věcí je kód pro zachycení obsahu schránky. Proto využíváme příkazu Clipboard (schránka) s atributem SelText (označený text) který umístí označený text v ovládacím prvku Text1 do deklarované proměnné pro, která je typu řetězec. Takže označení slovo potom můžeme zachytit do této proměnné a dále s ním pracovat v příslušných podmínkách typu If…Then. 5) Vytvoření statistického modulu Zvolte Project, Add modul a napište do modulu deklaraci dvou veřejných proměnných zhruba v těchto intencích: Public a As Integer Public b As Integer Klíčové slovo Public znamená, že obě deklarované proměnné jsou dostupné pro všechny formuláře v daném projektu. 6) Vytvoření procedury tlačítka Command 2 Přepněte se do objektového zobrazení formuláře Form1 a poklepejte na ovládací prvek Command2, aby se inicializovala procedura Command2_Click. Do procedury události napište příkaz: Form2.Show PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 32 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 7) Vytvoření uživatelského rozhraní formuláře Form 2 Zvolte Project, Add Form, vyberte Form a stiskněte Otevřít. Do projektu se přidá další formulář, který se jmenuje Form2. Na obrázku jej vidíte: Na formulář umístěte následující ovládací prvky a nastavte jim v panelu Properties následující vlastnosti: Obr. 21 Uživatelské rozhraní formuláře Form 2 Ovládací prvek Nastavení vlastností Form 2 Caption: Výukový program ČEŠTINA - Statistika Caption: Hodnocení tvých odpovědí Font: 10 tučné ForeColor: červená Caption: Celkově si odpověděl otázek: Caption: Z toho správných bylo: Caption: Z toho špatných bylo: Caption: Proto je tvá celková úspěšnost: Font: 12 tučné Frame 1 Label 1 Label 2 Label 3 Label 4 Label 5 Label 6 Label 7 Label 8 Label 9 Label 10 Command 1 Font: 14 tučné ForeColor: červená Caption: % Font: 14 tučné Font: 14 tučné ForeColor: modrá Caption: OK Funkce Druhý formulář aplikace. Slouží jako kontejner pro ovládací prvky Label1 až Label0. Slouží pro popis ovládacího prvku Label5. Slouží pro popis ovládacího prvku Label6. Slouží pro popis ovládacího prvku Label7. Slouží pro popis ovládacího prvku Label8. Slouží k zobrazení součtu čísel v proměnných a a b. Slouží k zobrazení čísla v proměnné a. Slouží k zobrazení čísla v proměnné b. Slouží pro zobrazení procentuálního hodnocení odpovědí. Slouží pro zobrazení znaku % u Lebelu8. Slouží k zobrazení úspěšnosti žáka. slovního hodnocení Slouží k opuštění Form2 a návratu do Form1. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 33 PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 8) Procedura formuláře Form2 Poklepáním na formulář Form 2 otevřete v okně kódu proceduru události Form_Load. Do procedury události zapište následující programový kód: Private Sub Form_Load() If a + b = Empty Then MsgBox ("zatím jsi neodpověděl ani na jednu otázku") Label5 Label6 Label7 c = (a = = = / a + b a b (a + b + 0.000000001)) * 100 Label8 = c If c >= 75 Then Label10 = "Získal jsi titul VŠEZNÁLEK!!!" If c < 75 And c >= 50 Then Label10 = "Seber se a vypluj z šedi průměru!!!" If c < 50 Then Label10 = "Opakování matka moudrosti - začni znova" End Sub 4) Vytvoření procedury tlačítka Command1 Uzavřete proceduru události Form_Load a poklepejte na ovládací prvek Command1, aby se inicializovala procedura Command1_Click. Do procedury události napište příkazy: Private Sub Command1_Click() Unload Form2 End Sub Tipy pro zdokonalení aplikace • Pokuste se o vytvoření takových podmínek, aby nebylo nutné naprosto přesně myší označit vybrané slovo. Tedy aby uživatel měl možnost označit i jiné znaky (např. mezera atd.) • Pokus se upravit aplikaci tak, aby dopočítávala čas potřebný k zadání odpovědi. PhDr. Milan Klement© – Tvorba výukového software – Pracovní listy 34
Podobné dokumenty
Vlková Dana - SOŠ ekologická a potravinářská, Veselí nad Lužnicí
1. ÚVOD .................................................................................................................................. - 7 2. TEORETICKÁ ČÁST ......................................
Ovládání laboratorního modelu robota Mindstorms
společníkem téměř kaţdého člověka. Dalo by se říct, ţe uţ máme všechno, jen nemáme a
asi ani nikdy nebudeme mít dost. Vývoj neustále pokračuje. Rodí se děti, které uţ mají
dnešní pokrok v krvi. Mal...
Školení pro pokročilé uživatele – Excel
odkazování na list (index, 2 typy názvu listu)
odkazování na sešit – rozdíl mezi ActiveWorkbook, ThisWorkbook,
Workbooks(Name)
7. Moduly
Chceme, aby se při klepnutí na tlačítko provedl programový kód sestavující z polí
Příjmení a Jméno pole E_mail. V řádku vlastnosti Při klepnutí tlačítka Tvorba klepneme do
tlačítka se třemi tečkami...
Metodika výuky programování - PROŠ
4) Jsou snáze zapamatovatelné
5) Jsou projevem vašeho zájmu
Pokud učitel stráví mnoho času přípravou vizuálních a audiovizuálních podkladů pro
výuku je jasné, že mu tato výuka není lhostejná. Můžem...
ASP.NET pre začiatočníkov
skontrolujú celý súbor a ak tento neobsahuje žiadny skriptový kód, priamo ho vložia do HTML stránky. Preto môžeme
používať príponu ASP pre všetky stránky bez ohľadu na to, či obsahujú, alebo neobsa...
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Diplomová práce
během cesty bludištěm nic odhodit ani ztratit. Myš nesmí skákat, překračovat nebo lozit
po stěnách. Také nesmí žádnou svou činností poškodit bludiště.
Objekt Timer a ProgressBarr – Videostop
Ve hře Videostop jde o to, zastavit měnící se čísla ve chvíli, kdy jsou zobrazena alespoň dvě stejná
čísla (5 bodů). Za tři stejná čísla obdrží hráč 10 bodů.
Založte si nový projekt a připravte si ...
Základy MS Excelu 2007 jednoduše
Pokud potřebujete ještě další výpočty, klepněte na stavový řádek pravým
tlačítkem myši a ze zobrazené nabídky Vlastní nastavení stavového řádku
vyberte ty funkce, které potřebujete.
34. Automatická...