Chcete se seznámit se světem programování? Máte zájem poznat tvorbu kancelářských programů? Předkládáme Vám učebnici Visual Basicu 6.0., která vám to umožní. Po velmi krátké době se naučíte standardní programové úkony, jako jsou práce s textovými řetězci, čtení obsahu souboru z disku nebo přístup k datům. Jste začátečník? Potom potřebujete získat podrobné vědomosti o jazyce SQL, umět definovat DSN a používat přístup do databáze přes RDO. I toto vše dokážete pomocí naší učebnice poměrně snadno a rychle. Hned v první lekci autor popisuje vývojové prostředí a základní filosofii programování. Další kapitoly se věnují nejpoužívanějším ovládacím prvkům a jejich využití při programování. Zvláštní pozornost je určena přístupu do databáze a používání databázových dat. Následující části se zabývají ošetřením chyb, laděním kódu a hlavně možnostmi, které Visual Basic nabízí pro vytvoření user friendly uživatelského rozhraní. Celá kniha končí popisem vybraných klíčových slov jazyka. Každá lekce obsahuje ilustrativní příklady, kontrolní otázky a úkoly, na kterých si prověříte i procvičíte právě získané znalosti. Vlastně už docela solidní programátorské dovednosti! Vydalo vydavatelství a nakladatelství Computer Press Hornocholupická 22, 143 00 Praha 4, http://www.cpress.cz Distribuce: Computer Press Brno, náměstí 28. dubna 48, 635 00 Brno-Bystrc, tel. (05) 46 12 21 11, fax: (05) 46 12 21 12, e-mail: distribuce@cpress.cz Computer Press Bratislava, Hattalova 12 831 03 Bratislava, SR, tel.: +421 (7) 44 45 20 48, 44 25 17 20, fax: +421 (7) 44 45 20 46, e-mail: distribucia@cpress.sk Publikaci lze objednat také na adrese http://www.vltava.cz ISBN 80-7226-312-9 ProdejnÌ kûd: K0350 9 788072 263127 DoporuËen cena 127 KË 183 Sk
David Morkes Učebnice Visual Basicu 6.0 Computer Press Praha 2000
Učebnice Visual Basicu 6.0 David Morkes Copyright Computer Press 2000. Vydání první. Všechna práva vyhrazena. Vydavatelství a nakladatelství Computer Press, Hornocholupická 22, 143 00 Praha 4, http://www.cpress.cz ISBN 80 7226 312 9 Prodejní kód: K0350 Jazyková korektura: Ladislav Valík Vnitřní úprava: Jiří Matoušek Sazba: Jiří Matoušek Rejstřík: Pavlína Bauerová Obálka: Martin Sodomka Komentář na zadní straně obálky: David Morkes Technická spolupráce: Petr Klíma Odpovědný redaktor: Jaroslav Škárka Vedoucí technické redakce: Martin Hanslian Vedoucí knižní redakce: Ondřej Jirásek Vedoucí produkce: Kateřina Vobecká Žádná část této publikace nesmí být publikována a šířena žádným způsobem a v žádné podobě bez výslovného svolení vydavatele. Veškeré dotazy týkající se distribuce směřujte na: Computer Press Brno, náměstí 28. dubna 48, 635 00 Brno Bystrc, tel. (05) 46 12 21 11, e mail: distribuce@cpress.cz Computer Press Bratislava, Hattalova 12/A, 831 03 Bratislava, Slovenská republika, tel.: +421 (7) 44 45 20 48, e mail: distribucia@cpress.sk Nejnovější informace o našich publikacích naleznete na adrese: http://www.cpress.cz/knihy/bulletin.html. Máte li zájem o pravidelné zasílání bulletinu do Vaší e mailové schránky, zašlete nám jakoukoli i prázdnou zprávu na adresu bulletin@cpress.cz.
Obsah Část 1 Obecné zásady programování 1 Úvod 3 Lekce 1 Úvodní seznámení s prostředím Visual Basicu 5 Lekce 2 Začínáme programovat 11 Funkce volání okna se zprávou MsgBox 15 Lekce 3 Začínáme programovat 19 Procedury 20 Deklarace proměnných 25 Deklarace konstant 35 Část 2 Programování ve Visual Basicu 37 Lekce 4 Popis a použití ovládacích prvků TextBox, CommandButton, ListBox 39 Lekce 5 Práce s textovými řetězci 49 Lekce 6 Další funkce a pokročilá práce s řetězci 55 vii
UČEBNICE VISUAL BASICU 6.0 Lekce 7 Přístup k textovým souborům a manipulace s nimi 61 Jak využít Word pro kontrolu pravopisu? 65 Nahrazování textu 66 Lekce 8 Přístup k datům 69 Lekce 9 Vytváření SQL dotazů 77 Příkaz SELECT 77 Klauzule IN 78 Fráze WHERE 78 Fráze GROUP BY 79 Fráze HAVING 79 Fráze ORDER BY 79 Deklarace WITH OWNERACCESS OPTION 80 SELECT...INTO 80 Operace UNION 81 Operace INNER JOIN 81 Operace LEFT JOIN a RIGHT JOIN 81 Predikáty ALL, DISTINCT, DISTINCTROW, TOP 82 Příkaz TRANSFORM 82 Příkaz PARAMETERS 83 Příkaz CREATE TABLE 83 Příkaz ALTER TABLE 83 Fráze CONSTRAINT 84 Příkaz CREATE INDEX 84 Příkaz DROP 85 Příkaz UPDATE 85 Příkaz DELETE 85 SQL dotaz aplikace z předchozí lekce 86 DSN-less 90 Ovládací prvek Data 90 Lekce 10 Tvorba uživatelsky příjemných aplikací 93 Menu 93 Kontextové menu 95 viii
OBSAH StatusBar 97 ToolBar 101 Další tipy pro tvorbu user friendly aplikací 104 Lekce 11 Tisk a ovládání tiskáren 107 CommonDialog 110 Lekce 12 Chyby a jejich ošetření 113 Použití příkazu On Error. 116 Lekce 13 Ladění programového kódu 121 Ladicí okno 123 Lekce 14 MDI formuláře 127 Lekce 15 Vytváření DLL knihoven 131 Přehled klíčových slov Visual Basic for Application 137 Direktivy překladače 137 Funkce 137 Příkazy 151 Rejstřík 163 ix
Část 1 Obecné zásady programování
Úvod Visual Basic a jeho odnože se v posledních letech staly hlavním programovacím prostřed kem na platformě produktů firmy Microsoft. Různé mutace tohoto programovacího jazy ka se používají nejen pro programování samostatných (i síťových) aplikací, ale také pro tvorbu maker v balíku programů Microsoft Office (Visual Basic for Applications) a při programování internetových aplikací, spouštěných na straně serveru (ASP) i klienta (Vi sual Basic Script). K oblibě tohoto programovacího jazyka přispěla hlavně jednoduchá syntaxe, snadná tvorba uživatelského rozhraní a velká variabilita a flexibilita jazyka. Učebnice, kterou právě začínáte číst se zabývá Visual Basicem jako samostatným programovacím jazy kem pro tvorbu převážně kancelářských aplikací. Popisovaná dosud poslední verze jazyka je 6.0. Programování ve Visual Basicu je počítáno mezi objektově orientované a událostmi říze né techniky. V krátkosti řečeno to znamená toto: Programátor může používat velké množství předdefinovaných objektů jako jsou formu láře, textová pole pro zadávání a zobrazování dat, příkazová tlačítka, menu, popisky a velké množství dalších objektů. Souhrnně tyto objekty nazýváme ovládacími prvky (anglicky controls). Každý ovládací prvek má definovány své vlastnosti, metody a události. Co jsou a k če mu slouží? Vlastnostmi prvku (anglicky properties) jsou přesně v souladu s názvem vlast nosti daného ovládacího prvku. Tyto vlastnosti udávají vzhled a chování ovládacího prvku v aplikaci. U textového pole lze například definovat font, kterým bude v poli zob razen text, velikost pole a jeho umístění na formuláři, název, pomocí něhož se na ovlá dací prvek bude odkazovat programový kód a mnoho dalších vlastností. Vlastnosti lze rozdělit do kategorií (viz obr. 1). Kategoriemi mohou být vzhled (Appere ance), chování (Behaviour), vazba na databázová data (Data) a další. ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Vlastnosti ovládacích prvků však lze rozdělit také podle jejich dostupnosti. Hodnoty některých vlastností je možné nastavit pouze jednou při zakreslování (design) ovládacího prvku na formulář, ale nelze je již měnit programovým kódem. Příkladem takové vlastnosti je Alignment (zarovnání). Jiné vlastnosti je možné definovat pouze za běhu aplikace (run time) programovým kódem, avšak při zakreslování jsou nedostupné. Drtivou většinu hodnot vlastností všech ovládacích prvků je však možné definovat jak při zakreslování a základní definici prvku, tak programovým kódem. 3
UČEBNICE VISUAL BASICU 6.0 Obr. 1 Okno vlastností textového pole (TextBox) Metody ovládacích prvků vlastně představují činnosti, které daný ovládací prvek může vykonávat, případně které mohou být vykonány na něm. Pokud se podržíme příkladu textového pole, najdeme u něj definované např. metody Refresh (obnovit zobrazovaná data) nebo SetFocus (umístění fokusu tj. zaměření na textové pole). Události definované u všech ovládacích prvků zajišťují, že programování ve Visual Basi cu se počítá mezi událostmi řízené programovací techniky. U každého ovládacího prvku najdeme seznam událostí, které mohou při běhu naprogramované aplikace vzniknout v přímém vztahu k tomuto prvku. Klasickými událostmi, které najdeme u většiny ovláda cích prvků, jsou Click (klepnutí myší na ovládací prvek), DblClick (poklepání myší na ovládací prvek), GotFocus a LostFocus (události nabytí, resp. pozbytí fokusu, tj. zaměře ní) a mnoho dalších. Události slouží k programování procedur, které se vykonají jako odezva na výskyt určité události. Např. procedura, která bude v programovém kódu při řazena k události Clik na příkazové tlačítko, se vykoná vždy, když uživatel na toto tlačít ko klikne myší. Uvedené charakteristiky Visual Basicu způsobují, že programování je v mnoha ohledech velice jednoduché a že kancelářské aplikace vytvořené pod Visual Basicem se graficky zcela shodují s prostředím operačního systému Windows. Tak se každý uživatel, který pracuje ve Windows, velice rychle naučí pracovat s novým programem, jehož ovládání se mu zdá intuitivní a podobné tomu, na co je zvyklý. 4
Lekce 1 Úvodní seznámení s prostředím Visual Basicu Cíle lekce: Seznámení a základní popis pracovního prostředí programovacího jazyka Visual Basic 6.0. Stejně jako člověk, který nastoupí do nového zaměstnání se musí nejprve seznámit se svými spolupracovníky a místem, kde bude pracovat, musíme se i my nejdřív podívat na to, čím budeme své nové programy vytvářet. Abychom mohli začít prvními jednoduchými programy, musíme poznat prostředky, kte ré nám k tomu Visual Basic nabízí. I když tato lekce nepodá ucelený popis všech nástro jů obsažených ve Visual Basicu, přiblížíme si zde ty, jež jsou nutné pro naprogramování první aplikace. Další vlastnosti, nastavení a nástroje potřebné pro práci v programovém prostředí si budeme popisovat průběžně v dalších lekcích tak, jak se vynoří potřeba je jich použití. Otevřete si tedy nejprve Visual Basic nejlépe z nabídky Start hlavního menu Windows. Při otevírání narazíte hned na první problém. Musíte zvolit typ nového projektu, který zakládáte. Projektem ve Visual Basicu rozumíme kolekci souborů, které v sobě obsahují definice formulářů a jejich ovládacích prvků a programový kód. Každý projekt obsahuje svůj hlavní soubor s příponou VBP (Visual Basic Project), pomocí něhož se projekt edituje v prostředí Visual Basicu. Na obr. 2 je zobrazeno množství možností, ze kterých je možné zvolit typ projektu. Ačko li dále v této učebnici bude řeč i o některých jiných typech projektů, v naprosté většině případů si vystačíme s tím základním Standard EXE (tj. projekt, jehož výsledkem bude standardní spustitelný soubor s příponou EXE). 5
UČEBNICE VISUAL BASICU 6.0 Obr. 2 Volba typu projektu Po volbě typu projektu se dostaneme hned do pracovního prostředí Windows. K první orientaci na této ploše slouží obr. 3. Obrázek obsahuje popisy nejdůležitějších částí plo chy. Pojmy definované tímto obrázkem budeme nadále používat v celé učebnici. Obr. 3 Pracovní plocha nové založeného projektu. 6
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ První dvě části vývojového prostředí Visual Basicu jsou standardní snad ve všech aplika cích Windows. Nabídka (menu) a nástrojová lišta jsou základními ovládacími prvky každého programu. Součásti těchto dvou částí pracovní plochy programu si budeme po pisovat postupně v celé knize. Další podokna vývojového prostředí jsou již plně přizpůsobena potřebám programování. Bílá střední část vývojového prostředí, která zabírá nejvíce místa, je pracovní plocha. Ten to sektor je určen ke dvěma základním účelům: Pro grafické navrhování formulářů a dialogových oken pro psaní, editaci a ladění programového kódu. Na obr. 3 je na pracovní ploše Visual Basicu zobrazen pouze jediný prázdný formulář s názvem Form1. V příštích lekcích se dozvíte, že v této části vývojového prostředí se mohou objevit i jiné objekty např. designer pro definici připojení aplikace ke zdroji dat v databázi. I tyto části však souvisejí s tvorbou programového kódu. V levé části je panel ovládacích prvků (ToolBox). Tento panel obsahuje schématické ikony ovládacích prvků, které lze přidávat do formulářů. První ikonou je šipka, která ne představuje ovládací prvek, ale volbu kurzoru pro manipulaci s již vytvořenými objekty. Dále již následují nejpoužívanější ovládací prvky v tomto pořadí: PictureBox (obrázkové pole), Label (popisek), TextBox (textové pole), Frame (rámec), CommandButton (příka zové tlačítko) atd. V dalším textu se budeme držet anglického názvosloví ovládacích prvků. Jednak proto, že prostředí Visual Basicu není lokalizováno do češtiny a při programování budete stejně muset znát anglické názvy, jednak proto že používání angličtiny je v programátorské komunitě běžnější a jednoznačnější než čeština. Prvků zobrazených v panelu ovládacích prvků může být mnohem více. Panel obsahuje vždy jen ty prvky, které jsou již použity v projektu a základní sadu prvků, která je zobrazena na obr. 3. Zkuste si na formulář umístit libovolný ovládací prvek. Klepněte na zvolený ovládací pr vek v panelu ovládacích prvků a potom při stisknutém levém tlačítku myši vymezte na formuláři Form1 plochu, na kterou bude ovládací prvek umístěn. Po uvolnění tlačítka myši se prvek na formuláři zobrazí v té velikosti, jakou jste nadefinovali. Úpravám veli kosti, umístění a nastavením ostatních vlastností se budeme věnovat dále v této lekci. V pravé části vývojového prostředí nalezneme další malá podokna, která jsou vesměs ur čena k tomu, aby usnadňovala programátorovi orientaci v právě vytvářeném projektu, ale i pro definici některých výchozích hodnot. 7
UČEBNICE VISUAL BASICU 6.0 Prvním takovým oknem je okno projektu. Toto okno obsahuje vždy všechny základní součásti, ze kterých se editovaný projekt skládá. V našem případě je to pouze kolekce formulářů obsahující jeden jediný formulář. Udělejme teď trochu odbočku a uveďme si, ze kterých součástí se projekt ve Visual Ba sicu skládá a jaké objekty se tudíž mohou v okně projektu objevit. Pokud mluvíme o součástech projektu, nemáme na mysli jednotlivé ovládací prvky vklá dané do formulářů. Prvky, které se na formuláře umísťují z panelu ovládacích prvků, te dy v okně projektu neuvidíte. Okno projektu zobrazuje objekty, které jsou součástí projektu ve dvou úrovních jako stromovou strukturu. Vyšší úrovní je kolekce konkrétních objektů, na niž jsou navázány jednotlivé objekty kolekce. První kolekcí (viz obr. 4) je kolekce formulářů obsahující čtyři různé formuláře. obr. 4 Příklad zobrazení okna projektu Dalším kontejnerem je kontejner nezávislých programových modulů. Programový modul obsahuje programový kód většinou nezávislý na formulářích. Do samostatných progra mových modulů se umísťují procedury a funkce Visual Basicu, které většinou nepracují přímo s ovládacími prvky jednotlivých formulářů, ale které mají k těmto polím vztah pou ze vzdálený. Tento přístup si budeme demonstrovat později. Každý formulář má implicitně vytvořen svůj vlastní programový modul, který však není vidět v okně projektu. Tento modul je určen (na rozdíl od nezávislých modulů) především pro manipulaci s ovládacími prvky formuláře, zobrazování dat na formuláři, atd. Modul formuláře je k tomuto účelu speciálně uzpůsoben, o čemž si již brzy povíme. Formuláře a moduly jsou daleko nejčastější objekty, které obsahuje téměř každý projekt. Ve většině lekcí této učebnice vystačíme právě s těmito dvěma objekty. Posledním druhem objektů, které jsou zobrazeny na obr. 4, je kontejner Designers obsa hující definici připojení aplikace k externí databázi. 8
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Práce s externími daty bývá velice frekventovanou činností kancelářských aplikací programovaných ve Visual Basicu. Proto se budeme možnostmi přístupu k datům zabývat velice podrobně. Použití designeru pro definici připojení k databázi je jednou z mnoha možností. Následujícím oknem vývojového prostředí je okno vlastností ovládacího prvku. Aktuálně je v tomto okně zobrazen soubor vlastností právě zvoleného ovládacího prvku. Vzhle dem k tomu, že jediným ovládacím prvkem nově založeného projektu je automaticky za ložený formulář, obsahuje okno vlastností informace právě o tomto okně. Rozbalovací lišta (ComboBox) v horní části okna slouží ke zvolení ovládacího prvku, jehož soubor vlastností chceme zobrazit. Tam je vždy zobrazen název ovládacího prvku (aktuálně Form1), následovaný udáním typu tohoto prvku v angličtině (aktuálně Form). Pod oknem vlastností je implicitně umístěn stručný komentář popisující význam právě zvolené vlastnosti. V okně na obr. 3 je zvolena vlastnost Caption, a proto nás popis in formuje, že tato vlastnost vrací nebo nastavuje text zobrazený v titulku objektu. Pro for mulář je to text v horní modré liště. Poslední okno je určeno pro nastavení startovní pozice formuláře na pracovní ploše Win dows tedy pozici, kde se formulář objeví při jeho prvním zobrazení v aplikaci. Pozici můžete definovat prostě tak, že jej myší umístíte na požadované místo v rámci malého monitoru v tomto okně. Otázky a úkoly: 1.Z jakých součástí se většinou skládají standardní projekty ve Visual Basicu? K čemu tyto objekty slouží? 2.Vysvětlete význam termínů metoda, vlastnost a událost ovládacího prvku. 9
Lekce 2 Začínáme programovat Cíle lekce: Vytvoření prvního jednoduchého progra mu ve Visual Basicu a demonstrace použití ovládacích prvků a základních charakteris tik programu. V této lekci vytvoříme první jednoduchou aplikaci. Celá aplikace bude sestávat z jediné ho formuláře, který bude obsahovat TextBox a CommandButton. Po kliknutí na Com mandbutton se text napsaný v TextBoxu zobrazí jako samostatné hlášení. Otevřete si tedy vývojové prostředí ve Visual Basicu a založte nový projekt Standard EXE, stej ně jako v minulé lekci. Měli byste mít otevřeno vývojové prostředí odpovídající obrázku č. 3. Nyní v panelu ovládacích prvků zvolte TextBox. Dokud si nezvyknete na ikony označující jednotlivé ovládací prvky, zjistíte správnou ikonu tak, že umístíte kurzor myši nad některou ikonu. Bezprostředně poté se u kurzoru objeví název ovládacího prvku. Postupem popsaným v předcházející lekci umístěte TextBox na formulář Form1 (viz obr.5). Nyní upravte velikost ovládacího prvku tažením za úchytné body TextBoxu. obr. 5 Formulář s TextBoxem Velikost většiny ovládacích prvků lze definovat také přesně nastavením jejich vlastností Height (výška) a Width (šířka) v okně vlastností. Kromě těchto vlastností můžete každý viditelný prvek přesně umístit na formuláři nastavením jeho vlastností Left (vzdálenost od levého okraje formuláře) a Top (vzdálenost od horního okraje formuláře). Nastavení těchto vlastností používejte především v těch případech, kdy potřebujete více ovládacích prvků zarovnat stejně. 11
UČEBNICE VISUAL BASICU 6.0 V praxi bývá často potřebné umísťovat na jeden formulář více ovládacích prvků tak, aby byly přímo pod sebou a se stále stejnou roztečí. K tomu slouží mřížka, kterou vidíte na obr. 5 ve formě teček na formuláři. Rozteč mřížky je možné nastavit v dialogovém okně na obr. 6, které můžete editovat Příkazem nabídky Tools/Options/General. V rámečku FormGrid Settings je možné nastavit následující parametry: Show Grid při zatržení se mřížka zobrazí Width šířka rozteče mezi sloupci mřížky Height výška rozteče mezi řádky mřížky Align Controls to Grid při zatržení jsou všechny ovládací prvky umísťované na formuláře přichyceny k mřížce. Obr. 6 Dialog pro nastavení mřížky Nyní nastavte některé vlastnosti ovládacího prvku TextBox: Vlastnost Hodnota (Name) txttext MultiLine True Text (prázdný řetěz) Name (jméno) je vlastnost určující název ovládacího prvku, pod kterým se bude daný pr vek ovládat programovým kódem. MultiLine pokud je nastaveno na hodotu True, je povoleno vkládat do TextBoxu více řádkový text. Text jedná se o textový řetězec, který je obsažen v TextBoxu. Pokud bude hodnotou prázdný řetězec, nebude při prvním zobrazení formuláře v poli žádný text. 12
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Dalším krokem bude přidání příkazového tlačítka CommandButton na plochu formulá ře. Proveďte to stejným způsobem jako u TextBoxu. Potom u tohoto tlačítka nastavte ná sledující vlastnosti: Vlastnost Hodnota (Name) cmdzobraz Caption Zobraz text Textová hodnota vlastnost Caption představuje titulek, který se zobrazí na příkazovém tlačítku. Stejně jako u TextBoxu můžete i u CommandButtonu nastavit jeho velikost buď tažením za úchyty nebo definicí vlastností Width a Height. Celý formulář nyní vypadá tak jako na obr. 7. Obr. 7 Hotový návrh formuláře Nyní přistoupíme k definování programového kódu spojeného s formulářem. V našem případě nebudeme zakládat žádný samostatný programový modul, ale vystačíme s mo dulem formuláře. Jediným kódem bude kód, který zajistí, že při klepnutí na tlačítko cmdzobraz se otevře okno se zprávou (Message Box), kde textem zprávy bude text ob sažený v TexBoxu txttext. Pro otevření modulu formuláře poklepejte kamkoli na plochu formuláře Form1 mimo ovládací prvky, které obsahuje. Otevře se okno kódu, které vidíte na obr. 8. Popišme si nyní organizaci tohoto okna. V levem rozbalovacím poli jsou vyjmenovány názvy všech ovládacích prvků umístěných na formuláři. Pouze formulář (jenž je na ob rázku právě vybrán) je identifikován slovem Form a nikoli svým názvem. Důvod je zřej mý zatímco ovládacích prvků jednoho druhu může být na formuláři více, je nutné je jich rozlišení podle vlastnosti Name. Formulář však může být jen jeden, protože se po hybujeme v programovém modulu právě jednoho formuláře. V pravém rozbalovacím menu je uveden výčet událostí, které mohou na zvoleném ovlá dacím prvku vzniknout a které je tudíž možné programově ošetřit. Aktuálně zvolená je událost Load formuláře. Událostní procedura Form_Load může obsahovat kód, který se provede při natažení formuláře do paměti počítače, tedy těsně před jeho zobrazením na monitoru. Tato událostní procedura nás ovšem nezajímá tu tentokrát programovat nebudeme. 13
UČEBNICE VISUAL BASICU 6.0 Obr. 8 Okno pro definici programového kódu příslušného k formuláři Událostní procedurou označujeme ucelenou část programového kódu, která se provede jako odezva na výskyt události, ke které je procedura připojena. Potřebujeme naprogramovat činnost aplikace po kliknutí na tlačítko cmdzobraz. Proto z levého sloupce vybereme ovládací prvek cmdzobraz a z pravého jeho událost Click. Do událostní procedury cmdzobraz_click zaneseme následující kód: Private Sub cmdzobraz_click() MsgBox txttext.text End Sub Popišme si, co znamená programový text, který jsme právě zapsali. Popisem procedur a jejich použitím se budeme podrobněji zabývat v následující lekci. Zde je popsán pou ze základ nezbytný k porozumění uváděného příkladu. První řádek je definice hlavičky procedury. Klíčová slova Private Sub uvozují proceduru. Jejich přesný význam bude popsán později. Následuje název procedury. Pro událostní procedury je zavedena neměnná konvence tak, že její název se skládá: z názvu ovládacího prvku, na němž může událost vzniknout z podtržítka z názvu události, která je programovaná. 14
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Za názvem procedury následuje tzv. seznam parametrů, které do procedury vstupují. Vzhledem k tomu, že tato procedura žádné parametry nemá, následují za názvem už jen levá a pravá závorka. Pod prvním řádkem v proceduře následuje vždy tzv. tělo, které představuje samotný kód Visual Basicu. V našem případě se jedná o jediný řádek. Klíčové slovo MsgBox zobrazí okno se zprávou. Zpráva, která bude zobrazena, následuje za klíčovým slovem. Podle zadání úlohy to má být textový řetězec zapsaný v TextBoxu txttext. Jak již víme, tento řetězec je zapsán ve vlastnosti Text příslušného ovládacího prvku. Jak tedy programově zjistit hodnotu vlastnosti ovládacího prvku? Vždy tak, že zapíšeme název příslušného ovládacího prvku, který je následován tečkou a názvem vlastnosti. Posledním řádkem procedury je End Sub, který standardně ukončuje proceduru. Nyní spusťte celý program příkazem Run/Start z nabídky nebo klávesou F5.Vytvořený formulář se zobrazí na obrazovce s kurzorem blikajícím v textovém poli. Vepište tedy do textového pole libovolný textový řetězec a klepněte na tlačítko s nápisem Zobraz text. Výsledek by měl vypadat podobně jako na obrázku 9. Obr. 9 Takto funguje náš první program Aplikaci zastavíte příkazem Run/End z nabídky. Před tím ovšem musíte zavřít okno se zprávou klepnutím na tlačítko OK tohoto okna. Funkce volání okna se zprávou MsgBox U této funkce se zastavme hned v začátku, protože její použití je velmi časté. Okno se zprávou se používá vždy, když program potřebuje uživatele na něco upozornit nebo o něčem informovat. Typickým příkladem může být zobrazení chybového hlášení. Funkce MsgBox zobrazí dialogové okno se zprávou a čeká dokud uživatel nestiskne tla čítko. Vrací hodnotu, která určuje, které tlačítko uživatel stiskl. Kromě textu zprávy uži vatel také definuje, jaká tlačítka se mají zobrazit, které z nich bude předvoleno a která ikona bude zprávu graficky doplňovat. 15
UČEBNICE VISUAL BASICU 6.0 Syntaxe funkce je následující: MsgBox(prompt[, buttons][,title][, helpfile, context]) Argumenty uvedené v hranatých závorkách znamenají, že jejich definice je nepovinná. V našem příkladu z lekce 1 je definován pouze argument prompt. Popis argumentů: prompt Řetězcový výraz zobrazený jako dialogová zpráva. Maximální délka promptu je závislá na šířce znaků písma, které je použito (cca 1024 zna ků). Má li prompt více než jednu řádku, je možné jej rozdělit pomocí zna ků konce odstavce (Chr(13)), přesunu na další řádek (Chr(10)) nebo je jich kombinací (Chr(13) + Chr(10)) mezi všemi řádky. Více si o této tech nice povíme v lekci věnované práci s řetězci. buttons Číselný výraz sestávající ze součtů identifikačních čísel tlačítek, které mají být zobrazeny, ikon a předvoleného tlačítka (viz dále). Implicitní hodnota (pokud vynecháte tuto volbu) je 0. title Řetězcový výraz zobrazený v titulkovém pruhu dialogu. Pokud title vyne cháte, je do titulkového pruhu vloženo jméno aplikace. V našem případě byl názvem aplikace text Project1. helpfile Řetězcový výraz určující název souboru, který obsahuje text nápovědy k di alogu. Je li argument helpfile určen, musí být také určen argument context. context Číselný výraz, který je přiřazen k tématu nápovědy. Hodnota argumentu buttons vzniká jako součet hodnot vybraných po jedné z následují cích částí (zkušenější z Vás správně poznávají vztah těchto dekadických čísel k binární soustavě). V prvním sloupci je určen název konstanty, který lze použít místo číselné hod noty, dále hodnota a popis: 1.část určuje tlačítka zobrazená v dialogu: Identifikátor Hodnota Popis: vbokonly 0 Zobrazí pouze tlačítko OK. vbokcancel 1 Zobrazí tlačítka OK a Storno. vbabortretryignore 2 Zobrazí tlačítka Zpět, Znovu a Ignorovat. vbyesnocancel 3 Zobrazí tlačítka Ano, Ne a Storno. vbyesno 4 Zobrazí tlačítka Ano a Ne. vbretrycancel 5 Zobrazí tlačítka Znovu a Storno. 2.část určuje styl ikony: Identifikátor Hodnota Popis: vbcritical 16 Zobrazí ikonu kritické zprávy. vbquestion 32 Zobrazí ikonu varovného dotazu. 16
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ vbexclamation 48 Zobrazí ikonu varovné zprávy. vbinformation 64 Zobrazí ikonu informační zprávy. 3.část určuje, které tlačítko je výchozí: Identifikátor Hodnota Popis: vbdefaultbutton1 0 Výchozí tlačítko je první. vbdefaultbutton2 256 Výchozí tlačítko je druhé. vbdefaultbutton3 512 Výchozí tlačítko je třetí. 4.část určuje režim dialogu: Identifikátor Hodnota Popis: vbapplicationmodal 0 Aplikační režim uživatel musí před pokračo váním další práce ve zvolené aplikaci odpově dět na zprávu. Hodnota 0 je implicitně předvo lena. Pokud vynecháte zadání argumentu but tons, budou informační okna pracovat v tomto režimu. vbsystemmodal 4096 Systémový režim všechny aplikace jsou po zastaveny, dokud uživatel neodpoví na zobra zenou zprávu. A jaké hodnoty funkce MsgBox vrací? V prvním sloupci je název vrácené konstanty, ve druhém její číselná hodnota a v posledním název tlačítka, které bylo stisknuto. Identifikátor Hodnota Popis: vbok 1 OK vbcancel 2 Storno vbabort 3 Zpět vbretry 4 Znovu vbignore 5 Ignorovat vbyes 6 Ano vbno 7 Ne V případě, že v TextBoxu nebude zapsán žádný text, zobrazí se hlášení Není zadán žád ný text obr. 10 MsgBox Toto je okno se zprávou., vbinformation + vbokonly, Zpráva 17
Lekce 3 Začínáme programovat Cíle lekce: Vysvětlit základní možnosti tvorby progra mového kódu, popis a použití procedur, proměnných a konstant. Než začneme vytvářet první program ve Visual Basicu, je nutné si říci základní filozofii vytváření takového programu a to, jaké nástroje máme pro tvorbu kódu k dispozici. Programový kód Visual Basicu netvoří jeden ucelený program, jako je tomu v některých jiných programovacích jazycích. Náš program se skládá ze souboru procedur a funkcí. S událostními procedurami jsme se již seznámili v první lekci tyto procedury patří ve Visual Basicu mezi nejdůležitější. Jsou připojeny k událostem jednotlivých ovládacích prvků a jsou aktivovány aplikací samotnou vždy ve chvíli, kdy příslušná událost nasta ne. (Událostí může být např. klepnutí nebo poklepání myší na ovládací prvek, otevření formuláře, ztráta nebo získání zaměření ovládacího prvku a mnoho dalších.) Kromě udá lostních procedur lze definovat i procedury obecné, které nejsou připojeny k žádné udá losti, ale na které se mohou ostatní událostní i obecné procedury odvolávat. Všechny procedury (událostní i obecné) se uchovávají v tzv. programových modulech. Rozezná váme dva druhy modulů: Modul připojený k formuláři v modulech tohoto typu jsou uloženy všechny událostní procedury a mohou v něm být i procedury obecné. Tento modul se automaticky zakládá spolu se svým formulářem a už ho neopouští. Standardní modul tento modul může obsahovat pouze obecné procedury a je nutné ho před použitím explicitně založit. K tomu slouží příkaz nabídky Pro ject/add Module. Název každého standardního modulu zahrnutého do projektu se objeví v okně projektu (viz obr. 4). Popis okna modulu, do kterého se ukládají procedury a vůbec veškerý programový kód, byl uveden již v první lekci. Proto jen stručně: Mezi procedurami v každém modulu se lze pohybovat pomocí rozbalovacích se znamů v horní části okna modulu (viz obr. 8). Levé pole slouží k vybrání konkrétní procedury pro editaci. Zobrazuje li levé pole položku (General), pak nabídka pravého pole obsahuje názvy všech obecných procedur. Pokud levé pole obsahuje název některého z ovládacích prvků formuláře, v pravém poli se objeví název události pro aktuál ně editovanou událostní proceduru. 19
UČEBNICE VISUAL BASICU 6.0 Události, ke kterým jsou již přiřazeny událostní procedury, se v nabídce pravého pole zobrazují tučně. Začněme tedy se seriózním a úplným popisem programovacího jazyka Visual Basic. Nej důležitější jednotkou programového kódu je procedura. Proto začneme nejprve s popi sem procedur. Procedury Spustitelný kód je v modulech uložen ve formě procedur. Událostní procedura reagující na výskyt události, ke které je připojena, je vždy uvozena klíčovým slovem Sub auklá dá se do modulu připojeného k formuláři. Obecné procedury se netýkají konkrétního objektu, a proto se mohou vyskytovat v obou druzích modulů popsaných výše. Mohou být uvozeny klíčovým slovem Sub (tyto procedury nevracejí při svém ukončení žádnou hodnotu) nebo slovem Function (procedury vracející hodnotu využitelnou v dalším bě hu programu). V příštím výkladu budeme nazývat procedury uvozené slovem Funktion jako funkce. Obecné procedury se spustí, pouze pokud je explicitně vyvoláte (v jiné obecné nebo událostní proceduře). Důvodů pro tvorbu obecných procedur je hned několik. Prvním z nich je možnost výpočtu a vrácení hodnoty procedurou obecné procedury se tedy dají naprogramovat jako uživatelem definované funkce a používat je třeba ve výrazech. Klasickým přikladem může být výpočet DPH. Do takové funkce vstupuje cena bez DPH, případně příznak definující procentuální výši DPH. Funkce pak vrací cenu s DPH. Další situací, kdy je dobré použít obecnou proceduru, je případ, kdy několik událostních procedur vykonává stejnou činnost. Tuto činnost je výhodné naprogramovat ve formě obecné procedury, která bude volána ze všech událostních procedur. Zabrání se tak duplikaci kódu a zjednoduší se údržba a případné další změny této části aplikace. Uveďme si nyní obecnou syntaxi procedur a funkcí. [Static] [Private] [Friend] Sub názevprocedury (seznam argumentů) příkazy End Sub Klíčová slova Static, Private a Friend jsou v syntaxi nepovinná a definují, zda se jedná o tzv. statickou, soukromou nebo??? proceduru. Tato klíčová slova budou popsána poz ději. Název procedury nesmí obsahovat mezery. Pokud se jedná o událostní proceduru, řídí se název procedury Sub přesnými pravidly: skládá se z kombinace názvu ovládacího prvku, k jehož události je procedura připojena (např. Form, je li událostní procedura při pojena k formuláři), dále znaku podtržítko (_) a názvu události. Např. Form_DblClick je 20
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ název událostní procedury určené pro spuštění při poklepání (dvojitém kliknutí) myší na plochu formuláře mimo jeho záhlaví a kterýkoli ovládací prvek umístěný na formuláři. Jak již víme, pokud je událostní procedura připojena k ovládacímu prvku formuláře, nahrazuje slovo Form název ovládacího prvku. Název ovládacího prvku je uveden v poli vlastnosti Name (název) a nemusí souhlasit s vlastností Caption (titulek). Pokud později změníte název ovládacího prvku, je nutné stejně změnit i názvy všech událostních procedur. Jinak se spojení mezi ovládacím prvkem a událostními procedurami ztratí. Procedura typu Function má podobnou syntaxi: [Static] [Private] Function názevprocedury (seznam argumentů) [As typ] Klíčová slova zde mají stejný význam jako u procedury Sub. Mezi oběma typy procedur je však několik rozdílů: 1.Procedury Function vracejí při ukončení hodnotu do názvu procedury, a proto má procedura Function udaný datový typ. Implicitně je funkce typu Variant. 2.Argumenty procedury Function se uvádějí v závorkách nejen při deklaraci, ale také při volání procedury. 3.Procedura Function nemůže v aplikaci figurovat jako událostní procedura a musí být proto definována jako obecná. 4.Zatímco procedury Sub často nepotřebují žádný seznam argumentů, funkce jsou ur čeny především pro zpracování těchto argumentů. Proto je deklarace funkce bez udaného seznamu argumentů spíše výjimkou. Popišme si nyní, jak vypadá tento seznam argumentů: Proceduře nebo funkci lze předávat jeden nebo více argumentů. Předává li se více než jeden argument, jsou argumenty navzájem odděleny čárkou. Syntaxe každého argumen tu je následující: [Optional] [ByVal] názevproměnné [()] [As typ] Implicitní způsob předávání argumentů je tzv. odkazem (někdy se uvádí jménem). To znamená, že procedura může měnit hodnotu této proměnné a nová hodnota zůstane za chována i po skončení procedury při dalším běhu programu. Pokud chcete předávat ar gument hodnotou, musíte uvést před argument klíčové slovo ByVal. Klíčové slovo Opti onal bude popsáno později. Případné závorky za názvem proměnné určují, že předáva ným argumentem je indexové pole. Typ proměnné se uvádí za klíčové slovo As. Visual Basic používá následující datové typy: Byte, Boolean, Integer, Long, Single, Double, Date, Currency, String, Variant, Object nebo uživatelem definovaný typ. Popis datových typů bude uveden později. Pokud datový typ argumentu není explicitně uveden, stává se 21
UČEBNICE VISUAL BASICU 6.0 datovým typem Variant, což znamená, že proměnná může obsahovat jakýkoli typ dat. Při volání procedury se její argumenty (na rozdíl od její definice) neuvádějí v závorkách. Příklad: Na volání procedury Alfa nejsnáze pochopíte rozdíl, mezi předáváním argumentů odka zem a hodnotou. Procedura Alfa má argument inta volaný odkazem a intb volaný hod notou. Po zavolání procedury Alfa z procedury Main bude v proměnné a hodnota 4 a v proměnné b hodnota 2. K tomuto příkladu se vrátíme v dalším výkladu, až si vysvě tlíme další pojmy nezbytné k pochopení tohoto kódu. Sub Alfa (inta As Integer, ByVal intb As Integer) inta = 2*intA intb = 2*intB End Sub Sub Main () Dim a As Integer a = 2 b = 2 Alfa a,b Debug.Print a Debug.Print b End Sub Příklad: Funkce vypočte, kolik je x procent (hodnota proměnné dbprocenta) ze zadaného celku (hodnota proměnné dbcelek). Oba argumenty jsou volány hodnotou. Výsledná hodno ta se přiřadí do proměnné vysledek v proceduře Main. Function Counter ( ByVal dbcelek, dbprocenta As Double) As Double Counter= dbcelek/100*dbprocenta End Function Sub Main () vysledek = Counter (300, 10) End Sub Vidíte, že tělo procedury se ukončuje klíčovým slovem End Function, jedná-li se o proceduru Function a End Sub, pokud jde o proceduru Sub. Pokud vás nezajímá hodnota, kterou procedura vrací, můžete ji vyvolat i bez přiřazení této hodnoty jiné proměnné. 22
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Pokud je argument volán odkazem, musejí být obě proměnné (volaná inta a volající a) deklarovány jako stejný datový typ. U proměnných volaných hodnotou je jejich použití volnější. Jak ukazuje funkce Counter, volající nemusí být vůbec proměnná, ale může se předávat konstanta. Funkce (jak sám název napovídá) jsou určeny pro provádění výpočtů. Výpočty se pro vádějí pomocí výrazů, jejichž součásti a povolené operace závisejí na tom, s jakými ope randy výraz nakládá a jakého typu má být výsledek. Pokud chcete, aby funkce vracela výsledek výpočtu, musí tělo funkce obsahovat řádek, na kterém se názvu funkce (jako proměnné výše definovaného typu) přiřadí příslušná hodnota. Tato hodnota musí být stejného datového typu, jako je deklarovaná funkce. Výpočty lze provádět nejen s čísly, ale s daty všech datových typů Tj. např. s textovými řetězci nebo daty typu Currency (peněžními položkami jejich datový typ se od běžných čísel také liší). Zapsáním kódu procedury do modulu často pravé programátorské trampoty teprve začí nají. Zapsaný kód funkcí a obecných procedur typu Sub je nutné zkompilovat a všech ny procedury pak odladit. Syntaxe vkládaného kódu se ověřuje již při jeho zadávání po jednotlivých řádcích (při přechodu na nový řádek pomocí klávesy ENTER), a proto je kompilace procedur většinou rychlou záležitostí. Pokud však nechcete, aby byla syntaxe kontrolována již při psaní, zrušte zatržení položky Auto Syntax Check v dialogu na obr. 11. Tento dialog otevřete příkazem nabídky Tools/Options. obr. 11 Zde můžete zrušit automatickou kontrolu syntaxe psaného kódu. 23
UČEBNICE VISUAL BASICU 6.0 Kompilace převádí vámi zapsané procedury do strojového kódu. Ve formě strojového kódu je potom počítač schopen program spustit. Spouštět aplikaci v prostředí systému Visual Basic je možné buď příkazem Run/Start (klávesa F5) nebo příkazem Run/Start With Full Compile spustit s explicitní kompilací veškerého programového kódu (klávesová zkratka CTRL+F5). Oba příkazy jsou dostupné z nabídky. Programovací jazyk Visual Basic nabízí mnoho variant při řešení mnohých programátor sky složitých situací. Jednoduchým příkladem této příznivé vlastnosti jazyka je možnost použití proměnného počtu argumentů v procedurách. Chcete li definovat proceduru, která při volání v různých částech aplikace provádí stejnou nebo velmi podobnou čin nost ovšem s jinými argumenty, nemusíte proceduru programovat dvakrát. Stačí, když některé argumenty definujete jako volitelné. K tomu slouží klíčové slovo Optional. Po kud kompilátor jazyka najde toto klíčové slovo před definicí argumentu procedury, ne považuje jeho vynechání při volání procedury za chybu. Fakt, že volitelný argument ne byl při volání procedury uveden, lze zjistit v těle procedury pomocí funkce IsMissing. Volitelné argumenty musejí být definovány vždy až na konci seznamu parametrů a musejí být datového typu Variant. Příklad: následující funkce vrací součet dvou až tří argumentů podle toho, kolik je jich při vyvo lání funkce uvedeno v seznamu argumentů. Function Soucet( inta, intb As Integer, Optional varc As Variant) If IsMissing(varC) Then Soucet = inta + intb Else Soucet = inta + intb + varc End If End Function Tato úloha se dá řešit ještě obecněji za pomoci procedury, do které lze zadat libovolný počet argumentů. Libovolný počet argumentů je možné zadat pomocí definice seznamu argumentů klíčovým slovem ParamArray. Následující funkce vrací součet všech argu mentů, které byly při volání funkce uvedeny. Function Soucet1( ParamArray varpole() As Variant) Dim varsoucet, var As Variant varsoucet = 0 24
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ For Each var In varpole varsoucet = varsoucet + var Next var Soucet1 = varsoucet End Function Funkci Soucet1 lze volat libovolným z následujících řádků: Suma = Soucet1( 25, 258, 259.6) Vysledek = 5 * Soucet1(1, 258, 35.58, 15, 1, 2, 45) Popis programové konstrukce For Each... In je uveden v kapitole zabývající se příkazy cyklu dále v učebnici. V našem případě se jedná o smyčku procházející všechny argu menty funkce. Obecné procedury Visual Basicu ve standardních modulech se často definují jako veřej né (Public). To znamená, že jsou dostupné z kterékoli části aplikace. To znamená, že veřejnou proceduru definovanou např. v samostatném modulu je možné volat i z jiných modulů, např. z modulů formulářů. Při volání procedury se spustí první procedura pří slušného jména, kterou v modulech aplikace objeví. Pokud v aplikaci existuje několik procedur jednoho jména, můžete specifikovat cestu ke konkrétní proceduře pomocí teč kové notace příkazový řádek bude mít tuto podobu: NázevModulu.NázevProcedury. Pokud hodláte obecnou proceduru používat pouze v rámci jejího modulu, deklarujte ji klíčovým slovem Private. Tím zajistíte, že proceduru nebude vidět z ostatních modulů a vyloučíte tím možnost konfliktů se stejnojmennými procedurami jiných modulů. Navíc se tím urychlí kompilace kódu procedury. Událostní procedury musejí být definovány pomocí klíčového slova Private, protože se předpokládá jejich použití pouze pro databázový objekt, ke kterému jsou připojeny. Deklarace proměnných Proměnné ve Visual Basicu stejně jako v jiných programovacích jazycích slouží k do časnému uchovávání hodnot během vykonávání programového kódu. Každá proměnná se musí deklarovat. Deklarace proměnné se provádí před jejím prvním použitím. Pojem deklarace proměnných v sobě zahrnuje nejen definici názvu proměnné a jejího dato vého typu, ale také obor (veřejné Public či soukromé Private proměnné) a dobu platnosti (statické, které si uchovávají svou hodnotu i po skončení procedury, ve kte ré jsou deklarovány, nebo takové proměnné, které žijí pouze po dobu provádění pro cedury). Určením oboru proměnných určujeme, ze kterých procedur a modulů bude proměnná dostupná. Stejně jako tomu bylo u procedur 25
UČEBNICE VISUAL BASICU 6.0 Začněme nejprve oborem proměnných. U některých proměnných je žádoucí, aby byly dostupné nejen v jedné proceduře, ale z celého modulu a někdy dokonce z celé aplika ce. Jak tuto dostupnost zařídit? Všechny proměnné jsou deklarovány v jedné z následujících částí programového kódu: 1.V deklarační sekci procedury.proměnné, které se zde deklarují, musejí být vždy uvozeny klíčovým slovem Dim. Takové proměnné jsou ve všech případech soukro mé vzhledem k proceduře a nejsou tudíž dostupné z jiných částí modulu ani apli kace. 2. V deklarační sekci modulu. Tj. v sekci označené jako (General) v levém rozbalova cím seznamu na obr. 8. Zde se dají deklarovat dva druhy proměnných: Soukromé vzhledem k modulu, ve kterém jsou deklarovány. Tyto proměnné mo hou být uvozeny buď klíčovým slovem Dim nebo Private. V tomto případě není mezi Dim a Private žádný rozdíl. Takto deklarované proměnné mohou používat všechny procedury daného modulu, nejsou však dostupné v ostatních modulech aplikace. Veřejné. Veřejné proměnné se v deklarační čási modulu definují pomocí klíčové ho slova Public. Tyto proměnné jsou dostupné ve všech modulech aplikace. Explicitní deklarace klíčovými slovy Dim, Private nebo Public je povinná, pokud deklarační sekce modulu obsahuje klíčová slova Option Explicit viz obr. 12. Pokud modul tato klíčová slova neobsahuje, není explicitní deklarace povinná. V tom případě kompilátor považuje každý neznámý identifikátor za novou proměnnou a při jejím prvním použití provede tzv. implicitní deklaraci. V takovém případě však hrozí nebezpečí, že Visual Basic bude i překlep v těle procedury v některých případech považovat za implicitní deklaraci proměnné a programový kód (ačkoli bude syntakticky správný) bude pracovat jinak, než zamýšlíte. Potlačením možnosti implicitní deklarace se vyhnete problémům při ladění procedur. 26
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ obr. 12 Modul, v němž je povinná explicitní deklarace všech proměnných. Příkaz Option Explicit není nutné vypisovat v každém modulu zvlášť. Tento příkaz bude uveden v deklarační části každého modulu, pokud zaškrtnete pole Require Variable Declaration (tj. v překladu požadovat deklaraci proměnných) v dialogovém okně Options (viz obr. 11), které vyvoláte příkazem Tools/Options z nabídky. Tuto volbu je vhodné zaškrtnout při vytváření aplikace hned na začátku, protože Visual Basic vloží po zaškrtnutí příkaz Option Explicit do nových modulů, ale nezmění již vytvořený kód. Pokud mají dvě proměnné se stejným názvem různý obor platnosti, je v jazyce Visual Ba sic praktikován přednostní přístup k proměnné lokálnější. Např. máte li deklarovanou proměnnou intx na úrovni modulu i na úrovni procedury Proc1 příslušné k tomuto mod ulu, bude se volání proměnné intx v proceduře Proc1 vztahovat k její lokální proměn né, zatímco ve všech ostatních procedurách modulu se bude samozřejmě identifikátor intx vztahovat k jediné v té chvíli dostupné proměnné totiž k proměnné deklarované na úrovni modulu. Je možné deklarovat dvě různé veřejné proměnné v různých modulech, které budou dostupné z celé aplikace, stejným názvem. Aby při jejich používání nedošlo ke konfliktu, je třeba je v kódu odlišit tak, že v odkazu na ně uvedete i název modulu, ve kterém byly deklarovány např. proměnná intx je deklarovaná v modulech Modul1 a Modul2. Označením proměnných Modul1.intX a Modul2.intX získáte odkaz na správnou proměnnou. 27
UČEBNICE VISUAL BASICU 6.0 Výše uvedená pravidla překrývání se nevztahují pouze na proměnné, ale i na všechny ostatní objekty, na které je možné v programovém kódu vytvářet odkazy: Tj. vlastnosti, ovládací prvky formulářů a sestav, procedury, konstanty nebo uživatelem definované ty py. Z toho vyplývá mimo jiné i to, že nemůžete pojmenovat stejně např. ovládací prvek formuláře a proměnnou deklarovanou na úrovni modulu příslušného k formuláři, proto že mají stejný obor platnosti. Stejně tak není možné nastavit vlastnost Name u dvou růz ných ovládacích prvků na stejnou hodnotu. Jak tedy získat hodnotu ovládacího prvku formuláře nebo libovolné z jeho vlastností v proceduře, ve které je deklarována lokální proměnná stejného názvu? Řešení poskytu je použití klíčového slova Me. Předpokládejme, že existuje lokální proměnná Informace a stejnojmenné příkazové tlačítko. V proceduře lze použít následující příkazy: Přiřazení hodnoty proměnné informace = 0 Znepřístupnění ovládacího prvku Informace Me.Informace.Enabled = False Následující příkaz však vygeneruje chybu: Informace.Enabled = False Přestože pravidla překrývání jsou poměrně jednoznačná, přispěje k přehlednosti programu, když budou všechny názvy jednoznačně odlišeny. Doba platnosti proměnných: Kromě oboru platnosti lze proměnným přisoudit také dobu platnosti. Hodnoty proměn ných deklarovaných na úrovni modulu se zachovávají po celou dobu, kdy je databázová aplikace otevřená. Lokální proměnné deklarované v procedurách klíčovým slovem Dim existují pouze po dobu běhu kódu procedury. Při novém spuštění procedury se tyto pro měnné znovu inicializují. Existuje však způsob, jak zachovat hodnotu lokální proměnné i pro následující spuštění procedury, ve které je deklarovaná. Taková lokální proměnná musí být definována jako statická klíčovým slovem Static. Přístup k lokální proměnné de klarované v proceduře má pouze její procedura, avšak hodnota proměnné se zachovává i po ukončení běhu procedury a vstupuje do ní při jejím dalším volání. Chcete-li, aby všechny proměnné procedury byly statické, deklarujte celou proceduru klíčovým slovem Static, které uveďte před klíčové slovo Sub nebo Function. Proměnné v proceduře pak budou statické bez ohledu na to, zda jsou deklarovány klíčovým slovem Dim nebo Static. V předcházejících odstavcích byla řeč o oboru a době platnosti proměnných. Nyní si řek něme, jak se proměnné skutečně deklarují. Syntaxe explicitní deklarace proměnných je následující: [Dim] [Static] NázevProměnné [As typ] 28
ČÁST 1 OBECNÉ ZÁSADY PROGRAMOVÁNÍ Vytváření názvů ve Visual Basicu: Konvence pro vytváření názvů (výraz NázevProměnné ve výše uvedené syntaxi) se týká názvů všech nových objektů, které při programování definujete. Vztahuje se tedy na ná zvy pocedur, proměnných, konstant, ale musejí se dodržovat i u názvů ovládacích prvků a jiných objektů, na které se programový kód Visual Basicu odvolává. Všechny názvy ob sažené v programovém kódu tedy musejí: začínat písmenem, skládat se pouze z číslic, písmen a znaku podtržení (_). Žádné jiné znaky nejsou povoleny, mít maximální délku 256 znaků, obsahovat pouze takové sekvence znaků, které se liší od klíčových slov Visual Basicu. Zaměřme se nyní na definici datového typu proměnné. Ten se uvádí za klíčové slovo As a jeho uvedení je nepovinné. Popis datových typů uvádí následující tabulka: Název typu Popis Byte Celočíselná hodnota zabírající jeden bajt, tj. 0 až 255. Integer Celočíselná hodnota se znaménkem zabírající nejvýše dva bajty, tj. 32 768 až 32 767. Long Celočíselná hodnota se znaménkem zabírající nejvýše čtyři bajty. Single Reálné kladné číslo s plovoucí čárkou zabírající nejvýše čtyři bajty. Double Reálné kladné číslo s plovoucí čárkou zabírající nejvýše osm bajtů. Currency Reálné číslo se čtyřmi desetinnými místy zabírající nejvýše osm bajtů. String Řetězec znaků, jehož délka je prakticky neomezená činí asi dvě miliardy znaků. Boolean Dva bajty obsahující hodnotu True nebo False (pravda nebo nepravda). Date Osm bajtů obsahující hodnotu datum/čas, tj. 1. leden 100 až 31. prosinec 9999. Object Čtyři bajty obsahující odkaz na libovolný Object. Variant Tento datový typ může obsahovat kterýkoli z předešlých dato vých typů v rozsahu, který byl uveden. Tento datový typ je im plicitně přiřazen každé proměnné, u které explicitní deklarace typu chybí. Nevýhodou, která je daní za flexibilitu proměnných tohoto typu, je jejich délka 16 bajtů a o něco pomalejší inter pretace hodnot při běhu programu. Ve většině případů použití této proměnné musí Visual Basic provést odpovídající konverzi podle typu výrazu, ve kterém je proměnná typu Variant právě použita. 29