+ All Categories
Home > Documents > domosti ojazyce SQL, umět definovat DSN apoužívat

domosti ojazyce SQL, umět definovat DSN apoužívat

Date post: 16-Oct-2021
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
176
Transcript

9 788072 263127

ISBN 80-7226-312-9ProdejnÌ kÛd: K0350

DoporuËen· cena 127 KË183 Sk

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í programo-

vé úkony, jako jsou práce s textovými řetězci, čtení ob-

sahu 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 po-

mocí 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ěnu-

jí 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čí popi-

sem 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átor-

ské 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: [email protected]

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: [email protected]

Publikaci lze objednat také na adrese http://www.vltava.cz

David Morkes

Učebnice Visual Basicu 6.0

Computer PressPraha2000

Učebnice Visual Basicu 6.0David 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

Žá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: [email protected]

Computer Press Bratislava, Hattalova 12/A, 831 03 Bratislava, Slovenská republika, tel.: +421 (7) 44 45 20 48, e−mail: [email protected]

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 [email protected].

Jazyková korektura: Ladislav ValíkVnitřní úprava: Jiří MatoušekSazba: Jiří MatoušekRejstřík: Pavlína BauerováObálka: Martin SodomkaKomentář na zadní straně obálky: David Morkes

Technická spolupráce: Petr KlímaOdpovědný redaktor: Jaroslav ŠkárkaVedoucí technické redakce: Martin Hanslian Vedoucí knižní redakce: Ondřej JirásekVedoucí produkce: Kateřina Vobecká

OObbssaahh

Část 1

OObbeeccnnéé zzáássaaddyy pprrooggrraammoovváánníí 11ÚÚvvoodd 33

Lekce 1

ÚÚvvooddnníí sseezznnáámmeenníí ss pprroossttřřeeddíímm VViissuuaall BBaassiiccuu 55

Lekce 2

ZZaaččíínnáámmee pprrooggrraammoovvaatt 1111FFuunnkkccee vvoolláánníí ookknnaa ssee zzpprráávvoouu MMssggBBooxx 1155

Lekce 3

ZZaaččíínnáámmee pprrooggrraammoovvaatt 1199PPrroocceedduurryy 2200DDeekkllaarraaccee pprroomměěnnnnýýcchh 2255DDeekkllaarraaccee kkoonnssttaanntt 3355

Část 2

PPrrooggrraammoovváánníí vvee VViissuuaall BBaassiiccuu 3377Lekce 4

PPooppiiss aa ppoouužžiittíí oovvllááddaaccíícchh pprrvvkkůů TTeexxttBBooxx,, CCoommmmaannddBBuuttttoonn,, LLiissttBBooxx 3399

Lekce 5

PPrrááccee ss tteexxttoovvýýmmii řřeettěězzccii 4499

Lekce 6

DDaallššíí ffuunnkkccee aa ppookkrrooččiilláá pprrááccee ss řřeettěězzccii 5555

vii

Lekce 7

PPřřííssttuupp kk tteexxttoovvýýmm ssoouubboorrůůmm aa mmaanniippuullaaccee ss nniimmii 6611JJaakk vvyyuužžíítt WWoorrdd pprroo kkoonnttrroolluu pprraavvooppiissuu?? 6655NNaahhrraazzoovváánníí tteexxttuu 6666

Lekce 8

PPřřííssttuupp kk ddaattůůmm 6699

Lekce 9

VVyyttvváářřeenníí SSQQLL ddoottaazzůů 7777PPřřííkkaazz SSEELLEECCTT 7777KKllaauuzzuullee IINN 7788FFrráázzee WWHHEERREE 7788FFrráázzee GGRROOUUPP BBYY 7799FFrráázzee HHAAVVIINNGG 7799FFrráázzee OORRDDEERR BBYY 7799DDeekkllaarraaccee WWIITTHH OOWWNNEERRAACCCCEESSSS OOPPTTIIOONN 8800SSEELLEECCTT......IINNTTOO 8800OOppeerraaccee UUNNIIOONN 8811OOppeerraaccee IINNNNEERR JJOOIINN 8811OOppeerraaccee LLEEFFTT JJOOIINN aa RRIIGGHHTT JJOOIINN 8811PPrreeddiikkááttyy AALLLL,, DDIISSTTIINNCCTT,, DDIISSTTIINNCCTTRROOWW,, TTOOPP 8822PPřřííkkaazz TTRRAANNSSFFOORRMM 8822PPřřííkkaazz PPAARRAAMMEETTEERRSS 8833PPřřííkkaazz CCRREEAATTEE TTAABBLLEE 8833PPřřííkkaazz AALLTTEERR TTAABBLLEE 8833FFrráázzee CCOONNSSTTRRAAIINNTT 8844PPřřííkkaazz CCRREEAATTEE IINNDDEEXX 8844PPřřííkkaazz DDRROOPP 8855PPřřííkkaazz UUPPDDAATTEE 8855PPřřííkkaazz DDEELLEETTEE 8855SSQQLL ddoottaazz aapplliikkaaccee zz ppřřeeddcchhoozzíí lleekkccee 8866DDSSNN--lleessss 9900OOvvllááddaaccíí pprrvveekk DDaattaa 9900

Lekce 10

TTvvoorrbbaa uužžiivvaatteellsskkyy ppřřííjjeemmnnýýcchh aapplliikkaaccíí 9933MMeennuu 9933KKoonntteexxttoovvéé mmeennuu 9955

UČEBNICE VISUAL BASICU 6.0

viii

SSttaattuussBBaarr 9977TToooollBBaarr 110011DDaallššíí ttiippyy pprroo ttvvoorrbbuu uusseerr ffrriieennddllyy aapplliikkaaccíí 110044

Lekce 11

TTiisskk aa oovvllááddáánníí ttiisskkáárreenn 110077CCoommmmoonnDDiiaalloogg 111100

Lekce 12

CChhyybbyy aa jjeejjiicchh ooššeettřřeenníí 111133PPoouužžiittíí ppřřííkkaazzuu OOnn EErrrroorr.. 111166

Lekce 13

LLaadděěnníí pprrooggrraammoovvééhhoo kkóódduu 112211LLaaddiiccíí ookknnoo 112233

Lekce 14

MMDDII ffoorrmmuulláářřee 112277

Lekce 15

VVyyttvváářřeenníí DDLLLL kknniihhoovveenn 113311PPřřeehhlleedd kkllííččoovvýýcchh sslloovv VViissuuaall BBaassiicc ffoorr AApppplliiccaattiioonn 113377

DDiirreekkttiivvyy ppřřeekkllaaddaaččee 113377FFuunnkkccee 113377PPřřííkkaazzyy 115511

RReejjssttřřííkk 116633

OBSAH

ix

ČČáásstt 11

OObbeeccnnéé zzáássaaddyy pprrooggrraammoovváánníí

ÚÚvvooddVisual 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é protvorbu maker v balíku programů Microsoft Office (Visual Basic for Applications) a připrogramová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, kterouprá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í verzejazyka – 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, popiskya 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íhoprvku 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ší.

TIP:

Vlastnosti ovládacích prvků však lze rozdělit také podle jejich dostupnosti. Hodnoty některýchvlastností 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šakpři zakreslování jsou nedostupné. Drtivou většinu hodnot vlastností všech ovládacích prvků jevšak možné definovat jak při zakreslování a základní definici prvku, tak programovým kódem.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

3

Obr. 1 Okno vlastností textového pole (TextBox)

Metody ovládacích prvků vlastně představují činnosti, které daný ovládací prvek můževykonávat, případně které mohou být vykonány na něm. Pokud se podržíme příkladutextové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 prvkunajdeme seznam událostí, které mohou při běhu naprogramované aplikace vzniknoutv 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ší naovlá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í jakoodezva 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ší.

TIP:

Uvedené charakteristiky Visual Basicu způsobují, že programování je v mnoha ohledech velice jed-noduché a že kancelářské aplikace vytvořené pod Visual Basicem se graficky zcela shodují s pro-středím operačního systému Windows. Tak se každý uživatel, který pracuje ve Windows, velice ry-chle naučí pracovat s novým programem, jehož ovládání se mu zdá intuitivní a podobné tomu, naco je zvyklý.

UČEBNICE VISUAL BASICU 6.0

4

Lekce 1

ÚÚvvooddnníí sseezznnáámmeenníí ss pprroossttřřeeddíímm VViissuuaall BBaassiiccuuCíle lekce:

Seznámení a základní popis pracovníhoprostředí programovacího jazyka VisualBasic 6.0.

Stejně jako člověk, který nastoupí do nového zaměstnání se musí nejprve seznámit sesvými spolupracovníky a místem, kde bude pracovat, musíme se i my nejdřív podívat nato, čí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émprostř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.

TIP:

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říponouVBP (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 budestandardní spustitelný soubor s příponou EXE).

5

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.

UČEBNICE VISUAL BASICU 6.0

6

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 prvkykaž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.

TIP:

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.

TIP:

V dalším textu se budeme držet anglického názvosloví ovládacích prvků. Jednak proto, že prostře-dí Visual Basicu není lokalizováno do češtiny a při programování budete stejně muset znát anglic-ké názvy, jednak proto že používání angličtiny je v programátorské komunitě běžnější a jedno-značnější než čeština.

TIP:

Prvků zobrazených v panelu ovládacích prvků může být mnohem více. Panel obsahuje vždy jen typrvky, 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 naformuláři Form1 plochu, na kterou bude ovládací prvek umístěn. Po uvolnění tlačítkamyš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.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

7

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 kolekceformulářů 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 jakostromovou strukturu. Vyšší úrovní je kolekce konkrétních objektů, na niž jsou navázányjednotlivé 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ý modulobsahuje 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.

TIP:

Každý formulář má implicitně vytvořen svůj vlastní programový modul, který však není vidětv okně projektu. Tento modul je určen (na rozdíl od nezávislých modulů) především pro manipu-laci s ovládacími prvky formuláře, zobrazování dat na formuláři, atd. Modul formuláře je k tomu-to úč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.

UČEBNICE VISUAL BASICU 6.0

8

TIP:

Práce s externími daty bývá velice frekventovanou činností kancelářských aplikací programova-ný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ž souborvlastností 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. Pozicimůžete definovat prostě tak, že jej myší umístíte na požadované místo v rámci maléhomonitoru 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 čemutyto objekty slouží?

2. Vysvětlete význam termínů metoda, vlastnost a událost ovládacího prvku.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

9

Lekce 2

ZZaaččíínnáámmee pprrooggrraammoovvaattCí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.

TIP:

Dokud si nezvyknete na ikony označující jednotlivé ovládací prvky, zjistíte správnou ikonu tak, žeumí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 (vizobr. 5). Nyní upravte velikost ovládacího prvku tažením za úchytné body TextBoxu.

obr. 5 Formulář s TextBoxem

TIP:

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ý prvekpřesně umístit na formuláři nastavením jeho vlastností Left (vzdálenost od levého okraje formu-láře) a Top (vzdálenost od horního okraje formuláře). Nastavení těchto vlastností používejte pře-devším v těch případech, kdy potřebujete více ovládacích prvků zarovnat stejně.

11

TIP:

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ůžeteeditovat Příkazem nabídky Tools/Options/General. V rámečku FormGrid Settings je možné nasta-vit 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řichy-ceny 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 hodnotouprázdný řetězec, nebude při prvním zobrazení formuláře v poli žádný text.

UČEBNICE VISUAL BASICU 6.0

12

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émtlačítku.

Stejně jako u TextBoxu můžete i u CommandButtonu nastavit jeho velikost buď taženímza ú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šempří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čítkocmdZobraz 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 mimoovlá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ányná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á jeudá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ímna monitoru. Tato událostní procedura nás ovšem nezajímá – tu tentokrát programovatnebudeme.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

13

Obr. 8 Okno pro definici programového kódu příslušného k formuláři

TIP:

Událostní procedurou označujeme ucelenou část programového kódu, která se provede jakoodezva na výskyt události, ke které je procedura připojena.

Potřebujeme naprogramovat činnost aplikace po kliknutí na tlačítko cmdZobraz. Protoz 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 procedura 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á.

UČEBNICE VISUAL BASICU 6.0

14

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ž jenlevá a pravá závorka.

Pod prvním řádkem v proceduře následuje vždy tzv. tělo, které představuje samotný kódVisual 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. Podlezadá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íšemená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 dotextové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

TIP:

Aplikaci zastavíte příkazem Run/End z nabídky. Před tím ovšem musíte zavřít okno se zprávouklepnutím na tlačítko OK tohoto okna.

FFuunnkkccee vvoolláánníí ookknnaa ssee zzpprráávvoouu MMssggBBooxxU této funkce se zastavme hned v začátku, protože její použití je velmi časté. Okno sezprávou se používá vždy, když program potřebuje uživatele na něco upozornit neboo 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.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

15

Syntaxe funkce je následující:

MsgBox(prompt[, buttons][,title][, helpfile, context])

TIP:

Argumenty uvedené v hranatých závorkách znamenají, že jejich definice je nepovinná. V našempří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élkapromptu 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.

UČEBNICE VISUAL BASICU 6.0

16

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 tomtorež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, vedruhé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”

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

17

Lekce 3

ZZaaččíínnáámmee pprrooggrraammoovvaattCí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í filozofiivytvář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ýchjiný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ří veVisual Basicu mezi nejdůležitější. Jsou připojeny k událostem jednotlivých ovládacíchprvků 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šechnyprocedury (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šechnyudálostní procedury a mohou v něm být i procedury obecné. Tento modul seautomaticky zakládá spolu se svým formulářem a už ho neopouští.

• Standardní modul – tento modul může obsahovat pouze obecné procedury a jenutné 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 projektuse 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 obsahujená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

TIP:

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.

PPrroocceedduurryySpustitelný 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 a uklá−dá se do modulu připojeného k formuláři. Obecné procedury se netýkají konkrétníhoobjektu, a proto se mohou vyskytovat v obou druzích modulů popsaných výše. Mohoubýt uvozeny klíčovým slovem Sub (tyto procedury nevracejí při svém ukončení žádnouhodnotu) 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 Funktionjako funkce.

Obecné procedury se spustí, pouze pokud je explicitně vyvoláte (v jiné obecné neboudá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 tedydají naprogramovat jako uživatelem definované funkce a používat je třeba ve výrazech.

TIP:

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íchprocedur 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 takduplikaci 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íhoprvku, 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

UČEBNICE VISUAL BASICU 6.0

20

název událostní procedury určené pro spuštění při poklepání (dvojitém kliknutí) myší naplochu formuláře mimo jeho záhlaví a kterýkoli ovládací prvek umístěný na formuláři.

TIP:

Jak již víme, pokud je událostní procedura připojena k ovládacímu prvku formuláře, nahrazuje slo-vo Form název ovládacího prvku.

TIP:

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ázvyvšech událostních procedur. Jinak se spojení mezi ovládacím prvkem a událostními proceduramiztratí.

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 procedurje 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 bezudané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). Toznamená, ž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. VisualBasic 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ýchtypů bude uveden později. Pokud datový typ argumentu není explicitně uveden, stává se

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

21

datovým typem Variant, což znamená, že proměnná může obsahovat jakýkoli typ dat. Přivolá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 4a 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

TIP:

Vidíte, že tělo procedury se ukončuje klíčovým slovem End Function, jedná-li se o proceduruFunction a End Sub, pokud jde o proceduru Sub.

TIP:

Pokud vás nezajímá hodnota, kterou procedura vrací, můžete ji vyvolat i bez přiřazení této hod-noty jiné proměnné.

UČEBNICE VISUAL BASICU 6.0

22

TIP:

Pokud je argument volán odkazem, musejí být obě proměnné (volaná – intA a volající – a) dekla-rovány jako stejný datový typ. U proměnných volaných hodnotou je jejich použití volnější. Jakukazuje 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 vracelavýsledek výpočtu, musí tělo funkce obsahovat řádek, na kterém se názvu funkce (jakoproměnné výše definovaného typu) přiřadí příslušná hodnota. Tato hodnota musí býtstejného datového typu, jako je deklarovaná funkce.

TIP:

„Výpočty“ lze provádět nejen s čísly, ale s daty všech datových typů – Tj. např. s textovými ře-tězci nebo daty typu Currency (peněžními položkami – jejich datový typ se od běžných čísel ta-ké 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.

TIP:

Syntaxe vkládaného kódu se ověřuje již při jeho zadávání po jednotlivých řádcích (při přechoduna nový řádek pomocí klávesy ENTER), a proto je kompilace procedur většinou rychlou záležitos-tí. Pokud však nechcete, aby byla syntaxe kontrolována již při psaní, zrušte zatržení položky Au-to 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.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

23

Kompilace převádí vámi zapsané procedury do strojového kódu. Ve formě strojovéhokódu je potom počítač schopen program spustit.

TIP:

Spouštět aplikaci v prostředí systému Visual Basic je možné buď příkazem Run/Start (klávesaF5) nebo příkazem Run/Start With Full Compile – spustit s explicitní kompilací veškerého progra-mové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žnostpouž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.

TIP:

Volitelné argumenty musejí být definovány vždy až na konci seznamu parametrů a musejí být da-tové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 seznamuargumentů 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

UČEBNICE VISUAL BASICU 6.0

24

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říkazycyklu 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á, ževeřejnou proceduru definovanou např. v samostatném modulu je možné volat i z jinýchmodulů, 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ěkolikprocedur 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.

TIP:

Pokud hodláte obecnou proceduru používat pouze v rámci jejího modulu, deklarujte ji klíčovýmslovem Private. Tím zajistíte, že proceduru nebude „vidět“ z ostatních modulů a vyloučíte tímmožnost konfliktů se stejnojmennými procedurami jiných modulů. Navíc se tím urychlí kompilacekó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.

DDeekkllaarraaccee pprroomměěnnnnýýcchh 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. Pojemdeklarace 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 dobuplatnosti (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).

TIP:

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

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

25

Začněme nejprve oborem proměnných. U některých proměnných je žádoucí, aby bylydostupné 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ždyuvozeny 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žívatvšechny procedury daného modulu, nejsou však dostupné v ostatních modulechaplikace.

• 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.

TIP:

Explicitní deklarace klíčovými slovy Dim, Private nebo Public je povinná, pokud deklarační sekcemodulu obsahuje klíčová slova Option Explicit – viz obr. 12. Pokud modul tato klíčová slova neob-sahuje, není explicitní deklarace povinná. V tom případě kompilátor považuje každý neznámý iden-tifiká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ěkte-rých případech považovat za implicitní deklaraci proměnné a programový kód (ačkoli bude syn-takticky 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.

UČEBNICE VISUAL BASICU 6.0

26

obr. 12 Modul, v němž je povinná explicitní deklarace všech proměnných.

TIP:

Příkaz Option Explicit není nutné vypisovat v každém modulu zvlášť. Tento příkaz bude uvedenv deklarační části každého modulu, pokud zaškrtnete pole Require Variable Declaration (tj. v pře-kladu požadovat deklaraci proměnných) v dialogovém okně Options (viz obr. 11), které vyvolátepříkazem Tools/Options z nabídky. Tuto volbu je vhodné zaškrtnout při vytváření aplikace hnedna začátku, protože Visual Basic vloží po zaškrtnutí příkaz Option Explicit do nových modulů, alenezmě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 deklarovanoupromě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átorintX vztahovat k jediné v té chvíli dostupné proměnné – totiž k proměnné deklarovanéna úrovni modulu.

TIP:

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óduodlišit tak, že v odkazu na ně uvedete i název modulu, ve kterém byly deklarovány – např. pro-měnná intX je deklarovaná v modulech Modul1 a Modul2. Označením proměnných Modul1.intXa Modul2.intX získáte odkaz na správnou proměnnou.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

27

Výše uvedená pravidla překrývání se nevztahují pouze na proměnné, ale i na všechnyostatní 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í prvekformulář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á Informacea 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

TIP:

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 Dimexistují 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í.

TIP:

Chcete-li, aby všechny proměnné procedury byly statické, deklarujte celou proceduru klíčovýmslovem Static, které uveďte před klíčové slovo Sub nebo Function. Proměnné v proceduře pak bu-dou 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 jenásledující:

[Dim] [Static] NázevProměnné [As typ]

UČEBNICE VISUAL BASICU 6.0

28

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 nejsoupovoleny,

• mít maximální délku 256 znaků,

• obsahovat pouze takové sekvence znaků, které se liší od klíčových slov VisualBasicu.

Zaměřme se nyní na definici datového typu proměnné. Ten se uvádí za klíčové slovo Asa 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řibajty.

Double Reálné kladné číslo s plovoucí čárkou zabírající nejvýše osmbajtů.

Currency Reálné číslo se čtyřmi desetinnými místy zabírající nejvýše osmbajtů.

String Řetězec znaků, jehož délka je prakticky neomezená – činí asidvě miliardy znaků.

Boolean Dva bajty obsahující hodnotu True nebo False (pravda nebonepravda).

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í deklaracetypu chybí. Nevýhodou, která je daní za flexibilitu proměnnýchtohoto 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í konverzipodle typu výrazu, ve kterém je proměnná typu Variant právěpoužita.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

29

S proměnnou typu Variant lze provádět všechny operace, které jsou povoleny s jednot−livými datovými typy. Příkladem budiž následující kód:

Dim varVariable ’ varVariable je typu Variant

varVariable = “356.25“ ’ varVariable obsahuje řetězec “356.25“

varVariable = varVariable * 2 ’ varVariable obsahuje reálnou číselnou hodnotu 712.5

varVariable = “Ahoj“ & varVariable ’ varVariable obsahuje řetězec ’ “Ahoj712.5“

varVariable = varVariable * 2 ’ Tento řádek vygeneruje chybu, protože s obsa−hem proměnné varVariable nelze provádět arit−metické operace

Předešlý příklad ukazuje další vlastnost jazyka, a to psaní poznámek do programovéhokódu. Poznámky slouží ke komentování jednotlivých programových pasáží a při kompi−laci se ignorují. Poznámka je uvozena apostrofem (’). Tento znak kompilátoru oznamu−je, že až do konce řádky není uveden žádný programový kód. Další možnost, jak do pro−gramu dostat komentář, představuje klíčové slovo Rem. Komentář uvedený za klíčovýmslovem Rem se také ignoruje.

Testování hodnoty proměnné typu Variant:

Předcházející příklad ukazuje pouze jednu z mnoha situací, která může při používáníproměnných datového typu Variant dělat problémy. Aby bylo možné předejít podob−ným chybám při běhu programu, obsahuje Visual Basic celou sadu funkcí určených protestování hodnot proměnných typu Variant.

První z těchto funkcí je funkce IsNumeric. Funkce vrací hodnotu True nebo False po−dle toho, zda aktuální hodnotu testované proměnné je možné použít jako platné číslo vevýrazu. Testovaná hodnota se uvádí do závorek za klíčové slovo IsNumeric – např:

If IsNumeric(varVariable) Then

varVariable = varVariable*2

Else

varVariable = 0

End If

Podobně jako funkce IsNumeric funguje také funkce IsDate. Tato funkce zjišťuje, zdaobsah proměnné splňuje podmínky kladené na datový formát Date.

Užitečné funkce testující proměnné typu Variant jsou dále IsEmpty a IsNull. FunkceIsEmpty testuje, zda byla proměnné po jejím vytvoření přiřazena hodnota či nikoli. Z an−glického významu názvu funkce je zřejmé, že funkce vrací hodnotu True pouze v přípa−dě, že proměnné dosud nebyla přiřazena žádná hodnota. Při běhu programu je proměn−né možné přiřadit hodnotu Empty a uměle tak navodit stejný stav, jaký byl před prvnímpřiřazením libovolné hodnoty této proměnné.

Další zvláštní hodnotou, kterou může proměnná datového typu Variant obsahovat, jehodnota Null. Hodnota Null se většinou používá na místech, kde jsou dosud neurčená

UČEBNICE VISUAL BASICU 6.0

30

data – hodnotu Null mají např. všechna pole před svou inicializací. Hodnotu Null lzeproměnné přiřadit (stejně jako hodnotu Empty) prostým přiřazovacím příkazem – např.:

varVariable = Null

Funkce IsNull zjišťuje, zda testovaná proměnná má hodnotu Null či nikoli.

TIP:

Zapamatujte si: hodnoty Null a Empty jsou dvě navzájem různé hodnoty. Zároveň se obě hodno-ty liší od prosté číselné nuly nebo řetězce nulové délky. Hodnoty Empty i Null však je možné po-užít ve výrazech. Hodnota Empty se ve výrazech chová buď jako nula nebo řetězec nulové délky(podle typu výrazu). Dále hodnota Null proniká výrazy obsahujícími proměnné datového typu Va-riant. Znamená to, že pokud se hodnota Null vyskytne ve výrazu, výsledkem celého výrazu už bu-de automaticky hodnota Null. Stejně tak pokud použijete hodnotu Null jako argument funkce ty-pu Variant, funkce vrací hodnotu Null.

Tím máme nezbytné informace o datovém typu Variant vyčerpány a můžeme se pustitdo popisu dalších typů.

Číselné datové typy:

Číselné datové typy se dělí na typy, které uchovávají pouze celočíselné hodnoty a na ty−py, které jsou určeny pro reálná čísla. Ačkoli čísla lze uchovávat i v proměnných typuVariant, číselné datové typy zabírají méně paměti a aritmetické operace s nimi provádě−né jsou rychlejší. Stejně tak je vhodné v programech rozlišovat proměnné na celočíselnéa typy s desetinnou čárkou a neusnadňovat si práci tím, že všechny proměnné budoudeklarovány jako typ Double. I celočíselná hodnota vložená do proměnné typu Single,Double nebo Currency se převede na hodnotu s desetinnou čárkou, což může (pokuds tímto jevem nepočítáte) při dalším zpracování způsobit nemalé potíže.

Řetězcové proměnné:

Proměnné typu String budou vždy obsahovat pouze řetězce a nikoli číselné hodnoty. Řetěz−cové hodnoty, které se do těchto proměnných přiřazují, se uvádějí v uvozovkách – např.:

Dim strRetez As String

strRetez = “Ahoj, světe“

Proměnná strRetez byla deklarována jako řetězec proměnné délky. Velikost takové pro−měnné se prodlužuje a zkracuje podle hodnoty, která je v ní aktuálně uložená. Kromětoho lze také deklarovat řetězcové proměnné s pevnou délkou. Příklad:Dim strPevny As String * 25

Proměnná strPevny bude mít vždy pevnou velikost 25 znaků. Pokud této proměnné při−řadíte řetězec, jehož délka bude přesahovat 25 znaků, budou všechny znaky počínaješestadvacátým ignorovány.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

31

TIP:

Vyhodnocování výrazů typu String se dá nadefinovat v deklarační části každého modulu – příka-zem Option Compare. Lze zde využít příkazů Option Compare Binary nebo Option Compare Text.Těmito příkazy se nastavuje relativní uspořádání použité při porovnání a to, zda se při porovná-vání řetězců budou rozlišovat velká a malá písmena (Option Compare Binary) nebo ne (OptionCompare Text).

Datový typ Boolean:

Datový typ Boolean je obdobou podobného datového typu, který se vyskytuje téměř vevšech vyšších programovacích jazycích. Proměnná datového typu Boolean může obsa−hovat pouze dvě hodnoty: False (nepravda) nebo True (pravda). Hodnota typu Boole−an je výsledkem všech logických výrazů. Výchozí hodnotou proměnných typu Booleanje False.

Datový typ Object:

Proměnná datového typu Object obsahuje čtyřbajtovou adresu odkazující na objektv aplikaci nebo na objekty v některých jiných aplikacích. K přiřazení objektu této pro−měnné se používá příkaz Set.

Uživatelem definované typy:

Tím končíme stručný popis základních datových typů programového jazyka Visual Basic.Avšak ještě než opustíme oblast datových typů, zastavme se u vlastních datových typů de−finovaných uživatelem. Jde o podobnou konstrukci programovacího jazyka Visual Ba−sic, jaká je např. v programovacím jazyce C označována slovem struktura. Uživatelem de−finované typy se používají v případě, že je výhodné v jedné proměnné uchovávat něko−lik souvisejících informací různých datových typů najednou. Uživatelem definované typyse deklarují pomocí klíčového slova Type. Tyto datové typy je možné definovat pouzev deklaračních sekcích modulu (nikoli procedur) a mohou být označeny jako soukromé(klíčové slovo Private) nebo veřejné (Public).

TIP:

Veřejné uživatelem definované datové typy mohou být definovány pouze ve standardníchmodulech.

Příklad:

Datový typ MujTyp bude přístupný pouze ve „svém“ modulu a bude obsahovat dvě pro−měnné: varVariable typu Variant a strJmeno typu String.

Private Type MujTyp

varVariable As Variant

strJmeno As String

End Type

UČEBNICE VISUAL BASICU 6.0

32

Tímto způsobem je zatím definován uživatelský typ s názvem MujTyp. Vlastní deklaraceproměnných tohoto typu již probíhá v souladu se všemi konvencemi deklarace proměn−ných tak, jak byly popsány v předcházejících kapitolách – např.:

Dim var, var1 As MujTyp

var.strJmeno=“Petr“

var1=var

Proměnné var a var1 jsou typu MujTyp. Přiřazení hodnot proměnným uživatelského ty−pu se děje podle předcházejícího příkladu. Na jednotlivé vnořené proměnné se odvolá−vá pomocí tečkové notace. Je povoleno i přiřazení hodnoty proměnné uživatelského ty−pu jiné proměnné (přiřazení struktury jako celku).

TIP:

Pomocí proměnné uživatelského typu lze přehledným způsobem předávat argumenty do proce-dur. Argumenty uživatelem definovaného typu se do procedur předávají vždy odkazem. Dokoncei návratová hodnota funkcí může být uživatelem definovaného typu.

Visual Basic samozřejmě umožňuje i vytváření vnořených struktur a struktur obsahujícíchpole. Názorný příklad tuto možnost dostatečně ozřejmí:

Type Zakaznik

strJmeno As String

strAdresa As String

intIdentifikace As Integer

End Type

Type Prodej

strVyrobek As String

Odberatel() As Zakaznik

End Type

Dim LednovyProdej(100) As Prodej

LednovyProdej(1).Odberatel(0).intIdentifikace = 105

Proměnná LednovyProdej je definována jako pole o sto jednom prvku uživatelského da−tového typu Prodej. Proměnná Odběratel je pole s proměnnou velikostí typu Zakaznik.Uživatelský typ Zakaznik je vnořený do typu Prodej. Odkazy na jednotlivé součásti struk−tury LednovyProdej ukazuje poslední příkaz našeho příkladu.

Pole:

Pole jsou posledním druhem proměnných, o kterých ještě nebyla řeč. Pojem pole je zná−mý snad ze všech programovacích jazyků. Jeho prvky mají vždy stejný datový typ (po−kud je pole typu Variant, mohou jednotlivé prvky samozřejmě obsahovat různé druhydat). Pole se dají deklarovat stejně jako ostatní proměnné pomocí klíčového slova Dim,

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

33

Private, Public nebo Static. Je možné definovat dynamická pole nebo pole s pevnýmirozměry.

U deklarace pole s pevnými rozměry se za identifikátor proměnné do kulatých závorekuvádí horní, případně dolní mez indexů.

Příklad:

Dim intPole(20) As Integer

Dim dbPole(1 To 20) As Double

Pole intPole je pole jednadvaceti hodnot typu Integer (indexy v rozsahu 0 – 20). PoledbPole je pole dvaceti hodnot typu Double (indexy v rozsahu 1 – 20).

Při určení horní i dolní meze indexového pole použijte v deklaraci klíčové slovo To.

TIP:

Všimli jste si, že pokud neuvedete dolní mez indexů, je tato mez implicitně nastavena na 0. To sedá změnit, pokud v deklarační sekci (General) příslušného modulu uvedete příkaz Option Base ná-sledovaný nejnižším platným indexem. Příkazem Option Base 1 nadefinujete implicitní dolní mezindexů polí na hodnotu 1.

TIP:

Ve Visual Basicu je možné deklarovat i vícerozměrná pole až do dimenze 60. Následující deklaracedefinuje třírozměrné pole s rozměry 4x5x20.

Dim int3D(3, 1 To 5, 6 To 25)

Vícerozměrná pole s pevnými mezemi je třeba užívat uváženě, aby nedocházelo ke zby−tečně velké alokaci paměti, která nebude v průběhu vykonávání programového kódupotřeba. Zvláště pole prvků datového typu Variant mohou zabrat v paměti počítače ne−přiměřeně velkou oblast.

Dynamická pole představují lákavou alternativu ve chvílích, kdy počet prvků pole ne−ní předem znám. Deklarace takového pole se provede bez určení horní a dolní mezeindexů.

Příklad:

Dim intPole1() As Integer

Deklarace je v tomto případě stejná pro jedno− i vícedimenzionální pole. Než ale může−te prvkům dynamického pole přiřadit konkrétní hodnoty, musíte velikost pole jedno−značně určit pomocí klíčového slova ReDim. To se však děje už v těle procedury (niko−li tedy v deklarační části) třeba na základě předchozích výpočtů. Tímto způsobem jemožné lépe a úsporněji využít paměť počítače a po použití pole ho z paměti opět od−alokovat tím, že poli přiřadíte minimální rozměry – např.

Function MojeFunkce () As Integer

UČEBNICE VISUAL BASICU 6.0

34

Dim intPole1() As Integer

Rem Začátek těla funkce

ReDim intPole1(99, 10) ’ Alokace dynamického pole 100x11Rem Pokračování funkce

ReDim intPole1(0) ’ Odalokování pole z pamětiEnd Function

Každým uvedením příkazu ReDim ztratíte všechny hodnoty pole, které v něm byly ulo−žené. Často je to v souladu s vaším přáním. Pokud však chcete pouze rozšířit pole o ně−kolik prvků, může být ztráta dat na škodu. Situace se dá řešit za pomoci klíčového slo−va Preserve. Tímto způsobem však můžete pouze zvětšit horní indexovou mez u po−sledního rozměru pole. Každé jiné použití klíčového slova Preserve vygeneruje chybu.

Je tedy možné použít následující sekvenci:

ReDim intPole1(10,10)

ReDim Preserve intPole(10, 20)

Místo druhého řádku našeho příkladu však již není možné uvést:

ReDim Preserve intPole(20, 20)

První rozměr pole intPole musí v tomto případě zůstat zachován.

DDeekkllaarraaccee kkoonnssttaannttKonstanta představuje symbolický název, kterému je přiřazen řetězec nebo číslo, kterése nemění. Definice konstant je výhodnější pro přehlednost a význam konstantních hod−not v programovém kódu.

Některé konstanty jsou definované systémem (např. některé konstanty pro přístup k da−tům), které jsou dostupné v kterémkoli modulu aplikace. Sám systém Visual Basic defi−nuje velké množství konstant, z nichž některé byly již popsány v části knihy věnovanéovládacím prvkům a jejich vlastnostem. Všechny druhy konstant lze využít v pro−gramovém kódu Visual Basic. Konstanty definované systémem Visual Basic jsou všech−ny veřejné, tj. lze je použít v kterékoli proceduře v kterémkoli modulu vaší aplikace.

Kromě těchto konstant může uživatel nadefinovat i své vlastní konstanty pomocí klíčo−vého slova Const. Definice vlastních konstant má následující syntaxi:

[Public|Private] Const názevkonstanty [As typ] = výraz

Pravidla pro definici konstant jsou velmi podobná jako pro deklaraci proměnných. Kon−stanty mohou být definovány jako veřejné či soukromé. Není−li explicitně uvedeno, jsoukonstanty považovány za soukromé. Veřejné konstanty je však možné definovat pouzeve standardním modulu – nikoli v modulu sestavy nebo formuláře.

ČÁST 1 – OBECNÉ ZÁSADY PROGRAMOVÁNÍ

35

ČČáásstt 22

PPrrooggrraammoovváánníí vvee VViissuuaall BBaassiiccuu

Lekce 4

PPooppiiss aa ppoouužžiittíí oovvllááddaaccíícchh pprrvvkkůů TTeexxttBBooxx,,CCoommmmaannddBBuuttttoonn,, LLiissttBBooxx

Cíle lekce:

Osvojit si ovládání a programování jednoduš−ších ovládacích prvků pro zobrazování dat.

V aplikacích naprogramovaných ve Visual Basicu uživatel často pracuje s daty, která bý−vají zobrazena ve standardních ovládacích prvcích. Tato lekce popisuje a na vzorovémpříkladu vysvětluje základní možnosti programování nejčastěji používaných ovláda−cích prvků. Těmito prvky jsou TextBox, Label, CommandButton, ListBox, ComboBox.

Otevřete si Pracovní prostředí Visual Basicu a založte nový projekt Standard EXE.

Na nový formulář projektu umístěte ovládací prvek ListBox. Schématická ikona tohotoprvku je standardně umístěna v Toolboxu. Název (vlastnost Name) Listboxu změňte nahodnotu lstZeme.

TIP:

Co to vlastně je ListBox? Listbox je prvek, ve kterém se zobrazuje seznam položek, ze kterých lzejednu nebo více položek vybírat. Konkrétním příkladem ListBoxu v operačním systému Windowsje třeba seznam nainstalovaného programového vybavení v Ovládacích panelech pod ikonou Při-dat nebo ubrat programy – viz obr. 13.

39

obr. 13 Příklad ListBoxu použitéhov operačním systému Windows.

Existuje mnoho vlastností ListBoxu, ze kterých si nyní popíšeme ty nejdůležitější. Je zřej−mé, že ve vlastnostech tohoto ovládacího prvku je nutné zadefinovat seznam položek,které bude ListBox zobrazovat. K tomu slouží vlastnost List.

Tato vlastnost nemá jedinou hodnotu, ale jedná se vlastně o pole hodnot, které jsou vlast−nosti přiřazeny. Pokud se podíváte do okna vlastností prvku ListBox a najdete vlastnostlist, zjistíte, že jednotlivé položky lze zapsat pod sebe do rozbalovacího seznamu (vizobr. 14). Do tohoto seznamu lze zadávat jednotlivé položky jak ve stavu návrhu aplika−ce, tak i programovým kódem při jejím běhu (naučíme se později v této lekci). Nyní za−pište do seznamu Názvy zemí tak, jak to ukazuje obr. 14.

obr. 14 Příklad zadání hodnot vlastnosti List při návrhu aplikace.

Další možností ListBoxu, která je velmi užitečná, je to, že programátor může každé po−ložce pole vlastnosti List přiřadit číselnou hodnotu. Pole těchto hodnot se zapisuje dovlastnosti ItemData.

TIP:

Zatímco pole hodnot vlastnosti List je typu String, vlastnost ItemData může obsahovat pouze čí-selné položky. Příkladem použití vlastnosti ItemData může být telefonní seznam, kde v ListBoxuuživatel vybere zemi, do které chce telefonovat. ListBox bude v takovém případě zobrazovat se-znam zemí a ve vlastnosti ItemData bude ke každé zemi přiřazena číselná předvolba telefonního čísla.

Při návrhu aplikace jsou položky seznamu List a ItemData v odpovídajícím pořadí. Po−kud nezadáte číselnou hodnotu ItemData k některé položce seznamu List, přiřadí jí Vi−sual Basic automaticky nulu. Naopak při vymazání položky ze seznamu se automatickysmaže i odpovídající údaj v poli ItemData. To znamená, že počet položek seznamů Lista ItemData je v každém okamžiku vždy stejný.

Naplňte tedy i pole ItemData libovolnými čísly. Formulář s ovládacím prvkem ListBox teďbude vypadat podobně jako na obr. 15.

UČEBNICE VISUAL BASICU 6.0

40

obr. 15 Formulář s vyplněným prvkem ListBox ve stavu návrhu aplikace

V naší vzorové aplikaci budeme chtít s položkami seznamu ListBox také programově ma−nipulovat. Konkrétně si předvedeme, jak programově odchytit zvolenou položku a jí při−řazené číslo v ItemData. Položku včetně jejího čísla budeme zobrazovat v TextBoxu.Umístěte tedy na formulář dva TextBoxy, z nichž první (Text1) bude zobrazovat řetězco−vou položku z ListBoxu a druhý (Text2) jí odpovídající hodnotu z pole ItemData.

Zároveň na formulář umístěte i CommandButton, který bude sloužit k přenesení zmíně−ných údajů o aktuálně zvolené položce z ListBoxu do obou výše zmíněných TextBoxů.Vlastnost Name prvku CommandButton nechte na implicitní hodnotě Command1.Změňte pouze vlastnost Caption (tj. titulek – nápis, jenž bude na tlačítku zobrazen) na„Přenes“.

Formulář bude nyní vypadat podle obr. 16.

obr. 16 Formulář rozšířený o další ovládací prvky

Slíbili jsme si, že si ukážeme také možnost dynamického přidávání položek do ListBoxujiž za běhu aplikace. Tato část bude fungovat tak, že uživatel zadá do dvou různýchTextBoxů číselnou i řetězcovou hodnotu, které se po klepnutí na další CommandButtonpřidají do polí List a ItemData původního ListBoxu.

Za tímto účelem přidejte do našeho formuláře další dva TextBoxy (Text3 a Text4) a je−den CommandButton. Vlastnost Caption tlačítka nastavte tentokrát na hodnotu „Přidej“.

Formulář bude tentokrát vypadat jako na obr. 17.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

41

obr. 17 Formulář rozšířený o další ovládací prvky

Tím je návrh formuláře hotový a můžeme přikročit k programování událostí, které se nadovládacími prvky umístěnými ve formuláři na obr. 17 vyskytnou.

Nejprve musíme zobrazit programový modul formuláře, o kterém víme, že je již implicit−ně vytvořen spolu s formulářem, i když jej nevidíme v okně projektu. V okně projektutedy zvolte formulář, na který jste umístili prvky (bude tam pouze jeden formulář – vizobr. 18) a v tom samém okně klepněte na ikonu View code (prohlédnout kód). Zobra−zí se plocha modulu, do kterého budeme přidávat kód.

obr. 18 Okno projektu

Z levého ovládacího pole modulu – v tomto poli bude nejprve zobrazen text (General)– zvolte položku Command1. To je název CommandButtonu určeného pro zobrazení ak−tuální položky ListBoxu v textových polích Text1 a Text2.

V pravém poli si následně zvolte událost, kterou budeme programovat – událost Click.

Do takto sestavené procedury zapište následující programový text:

Private Sub Command1_Click()

Text1.Text = lstZeme.Text

With lstZeme

Text2.Text = .ItemData(.ListIndex)

End With

End Sub

UČEBNICE VISUAL BASICU 6.0

42

První a poslední řádek představují úvodní a koncový řádek deklarace procedury – tytořádky již známe, a proto si popíšeme pouze tělo procedury:

První řádek těla procedury říká: Do vlastnosti Text textového pole Text1 přiřaď hodnotuvlastnosti Text ovládacího prvku lstZeme. Tedy tu řetězcovou hodnotu ListBoxu, která jev seznamu aktuálně zvolena. Pokud se tato procedura vyvolá v okamžiku, kdy není zvo−lena žádná položka ListBoxu, nastane běhová chyba aplikace. Eliminaci této chyby zajis−tíme v programovém kódu později.

Další řádek uvozený klíčovým slovem With pouze uvozuje konstrukci Visual Basicu. Taříká, že následující řádky programového kódu budou pracovat s objektem lstZeme a je−ho název se tudíž v následujícím textu nemusí vyskytovat.

Následující řádek přiřazuje do vlastnosti Text textového pole Text2 aktuální číselnou hod−notu ItemData. Řádek je vlastně zkráceným zápisem

Text2.Text = lstZeme.ItemData(lstZeme.ListIndex)

Na pravé straně přiřazení je hodnota pole ItemData určená indexem lstZeme.ListIndex.Aktuální index zvolené položky ListBoxu je, jak vidno z použité syntaxe, uložen jakohodnota vlastnosti ListIndex.

TIP:

Vlastnost ListIndex nenajdete v okně vlastností příslušného ovládacího prvku. Tato vlastnost je pří-kladem toho, že některé vlastnosti jsou dostupné pouze programovým kódem za běhu aplikace.

Následuje již jen ukončení konstrukce With.

TIP:

Vlastnost Text je u ovládacího prvku implicitně předdefinovaná. To znamená, že se v zápisu kódunemusí uvádět. Znamená to, že zápis Text2.Text = .ItemData(.ListIndex) je

ekvivalentní se zápisem Text2 = .ItemData(.ListIndex).

Na obr. 19 je zobrazeno okno modulu formuláře s naprogramovanou první procedurou.

Obr. 19 Okno modulu formuláře

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

43

Nyní zajistíme, aby při prvním natažení formuláře bylo znepřístupněno tlačítko Com−mand1. Při natažení formuláře není zvolena žádná položka ListBoxu, a proto musímepředejít spuštění procedury Command1_Click, ve které by jinak vznikla běhová chyba.

Událost natažení formuláře Form_Load vznikne vždy při natahování formuláře do pamě−ti těsně před jeho zobrazením na monitoru:

Private Sub Form_Load()

Command1.Enabled = False

End Sub

V této proceduře přiřadíme vlastnosti Enabled prvku Command1 hodnotu False. Příka−zové tlačítko se tedy na formuláři zobrazí jako nedostupné, zšedlé. Stejně jak jste na tozvyklí z běžných aplikací Windows, které obsahují nedostupná tlačítka.

Podobným způsobem teď naprogramujeme událostní proceduru lstZeme_Click, tedyodezvu na událost Click, která vznikne na ovládacím prvku ListBox:

Private Sub lstZeme_Click()

If lstZeme.SelCount > 0 Then Command1.Enabled = True

End Sub

Aplikaci vylepšíme tím, že údaje z ListBoxu se budou do textových polí Text1 a Text2vypisovat i po poklepání na určitou položku seznamu. Proto přidáme do projektu dalšíudálostní proceduru:

Private Sub lstZeme_DblClick()

If lstZeme.SelCount > 0 Then Command1_Click

End Sub

Při poklepání na ovládací prvek lstZeme tato procedura zkontroluje, jestli je aktivní ně−která položka seznamu. Pokud ano, zavolá proceduru Command1_Click – tedy stejnouakci, jakou vyvolá uživatel klepnutím na tlačítko Command1.

Další funkcí bude naprogramování tlačítka Command2, které má sloužit k přidání polož−ky do seznamu lstZeme. Procedura očekává textový řetězec v TextBoxu Text3 a odpoví−dající číselnou hodnotu ItemData v poli Text4:

Private Sub Command2_Click()

lstZeme.AdItem Trim(Text3)

With lstZeme

.ItemData(.NewIndex) = Text4

End With

End Sub

První řádek těla procedury vyvolává metodu AdItem ovládacího prvku lstZeme. Parametremtéto metody je řetězcová hodnota textového pole Text3. Funkce Trim je vestavěnou funkcíVisual Basicu a používá se k vypuštění případných mezer na začátku a konci textového ře−tězce.

UČEBNICE VISUAL BASICU 6.0

44

TIP:

Například příkaz Trim(“ ahoj, světe “) vrátí hodnotu řetězce „ahoj, světe“. Mezera mezi slovy tedyzůstane zachována.

Do pole ItemData příslušného ovládacího prvku je následně nutné vložit hodnotu obsa−ženou v textovém poli Text4. Dříve vyvolaná metoda AdItem automaticky přiřadila novépoložce jedinečný index. Hodnota posledního vytvořeného indexu se uchovává ve vlast−nosti NewIndex – tato vlastnost je také využita při zanesení hodnoty do pole ItemData.

Procedura Sub Command2_Click předpokládá, že obě pole Text3 a Text4 jsou vyplněnakorektně – tedy že v okamžiku jejího spuštění Text3 obsahuje řetězec znaků a Text4 číslo.

TIP:

Pokud Text4 nebude obsahovat platnou číselnou hodnotu, nastane v proceduře Command2_Clickběhová chyba.

Tuto situaci je také třeba programově ošetřit. Provedeme to v několika krocích:

Nejprve doplníme proceduru Form_Load takto:

Private Sub Form_Load()

Command1.Enabled = False

Command2.Enabled = False

End Sub

Dále je nutné zkontrolovat, zda Text4 obsahuje číselnou hodnotu a pokud ano, zpřístup−níme tlačítko Command2.

TIP:

Pro kontrolu, jestli hodnota je číselná použijeme opět vestavěnou funkci Visual Basicu IsNumeric,která vrací hodnotu typu Boolean – False v případě, že argument není číslo, True v případě, že čí-slem je.

Procedura, kterou naprogramujeme bude vypadat takto:

Private Sub Text4_LostFocus()

If IsNumeric(Text4) Then

Command2.Enabled = True

Else

Beep

Command2.Enabled = False

MsgBox “Hodnota není číselná“, vbCritical

End If

End Sub

Setkáváme se zde s novou událostí – LostFocus (při ztrátě fokusu neboli zaměření).

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

45

TIP:

Ovládací prvek je zaměřen (má fokus), pokud s ním uživatel zrovna pracuje. TexBox má fokus v pří-padě, že je v něm umístěn čárkový kurzor, CommandButton má fokus, pokud je zvýrazněn čárko-vanou čarou – viz obr. 20, atp. Přesun fokusu z prvku na prvek může uživatel provádět napříkladklepnutím myší na určitý prvek nebo klávesou Tab. Na aktivním formuláři existuje vždy právě je-den ovládací prvek se zaměřením. Zaměřen může být i formulář jako celek.

obr. 20 Tlačítko Update má právě fokus, tlačítko Zavřít nikoli.

Kontrola, zda Text4 obsahuje číselnou hodnotu, se provede vždy při opuštění tohoto po−le. Funkce Beep vyvolá akustické pípnutí, které uživatele upozorní, že něco není v po−řádku.

TIP:

V následujících lekcích si ukážeme další způsoby jak kontrolovat, zda zadávané hodnoty jsou po-žadovaného datového typu. V naší první aplikaci však s tímto způsobem vystačíme.

Naučíme se také vypustit položku ze seznamu ListBox. Pokud má ListBox fokus a uživa−tel stiskne klávesu Delete na klávesnici, bude vymazána aktuální položka seznamu.Doplňte tedy do projektu následující proceduru:

Private Sub lstZeme_KeyDown(KeyCode As Integer, Shift As Integer)

If (lstZeme.SelCount > 0) And (KeyCode = vbKeyDelete) Then

If MsgBox(“Opravdu smazat?“, vbYesNo + vbQuestion)= vbYes Then

lstZeme.RemoveItem (lstZeme.ListIndex)

End If

End If

End Sub

Setkáváme se zde opět s novou událostí – KeyDown (stlačení klávesy na klávesnici).Uvědomte si, že procedura lstZeme_KeyDown se provede pouze v případě, že ovládacíprvek lstZeme je právě zaměřen a uživatel stlačí libovolnou klávesu.

Tato vstupní procedura má také dva vstupní parametry, podle kterých může programá−tor zjistit, která klávesa byla stisknuta.

Prvním parametrem je KeyCode. Ten při aktivování procedury obsahuje číselný kódklávesy.

UČEBNICE VISUAL BASICU 6.0

46

TIP:

Aby byl programový kód přehlednější má Visual Basic nadefinováno velké množství globálníchkonstant, které lze v v programech použít. Např. výše použitá konstanta vbKeyDelete má hodno-tu 46 – číselný kód klávesy Delete. Podobně jsou definovány také konstanty vbKeyF1 (klávesaF1), vbKeyHome (klávesa Home) a mnohé další.

Druhým parametrem je Shift. Pokud je stisknuta klávesa spolu s některým přepínačem(tj. Shift, Alt nebo Ctrl), umožňuje tento parametr zjistit, která kombinace přepínačů by−la stisknuta zároveň.

Pokd je stisknut samotný přepínač Shift, má parametr Shift hodnotu 1. Pro přepínač Ctrlje to hodnota 2 a pro Alt hodnota 4. Je−li stisknuto více přepínačů najednou, hodnoty sesčítají. Pokud byly např. stisknuty přepínače Ctrl a Alt, má parametr Shift hodnotu 6 atd.

V případě, že nebyl stisknut žádný přepínač, má parametr Shift hodnotu 0.

TIP:

Podobně jako událost KeyDown lze používat i událost KeyUp, která vznikne při uvolnění klávesy.

Při aktivace procedury lstZeme_KeyDown musíme nejprve zjistit, jestli stisknutou kláve−sou bylo Delete a zda je zvolena aktivní položka seznamu. Tyto dvě podmínky musejíplatit zároveň, a proto jsou v první podmínce If spojeny logickým součinem (operátorAND).

V případě splnění obou podmínek se vyvolá okno se zprávou vyžadující potvrzení, žepoložka má být opravdu smazána. Stiskne−li uživatel tlačítko „Ano“, aktivní položka seopravdu vymaže. K tomu slouží metoda RemoveItem ovládacího prvku lstZeme. Argu−mentem metody je index položky, která má být vymazána.

obr. 21 Hotová aplikace demonstrující použití ovládacích prvků ListBox, CommandBut−ton a TextBox.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

47

Otázky a úkoly:

1. Zopakujte si, jaké události jsme se u jednotlivých ovládacích prvků naučili progra−movat a kdy se tyto události aktivují.

2. Zkuste si pomocí vlastnosti Enabled střídavě zpřístupnit a znepřístupnit ovládacíprvky TextBox a ListBox.

3. Podobnou vlastností jako Enabled je u většiny ovládacích prvků vlastnost Visible.Vyzkoušejte si její funkci v právě naprogramované aplikaci. V čem se obě vlastnostiliší?

UČEBNICE VISUAL BASICU 6.0

48

Lekce 5

PPrrááccee ss tteexxttoovvýýmmii řřeettěězzcciiCíle lekce:

Naučit se skládat textové řetězce, vyhledá−vat a formátovat podřetězce, naučit se ovlá−dat vestavěné funkce Visual Basicu určenépro práci s řetězci.

V minulé lekci jsme se naučili používat ovládací prvky, které nejčastěji zobrazují da−ta. Předpokládali jsme, že data (ať již textová nebo číselná) jsou v ovládacích prvcíchzadána ve správném tvaru a není je nutné již dále upravovat. V praxi se však setkátes potřebou upravovat řetězce znaků pro jejich další použití. Jedná se vlastně o maléúlohy, které je nutné řešit v rámci větších projektů. Typickými úlohami pro práci s ře−tězci jsou např.:

• zjištění podřetězce ze zadaného řetězce znaků

• spojení několika řetězců v jediný

• rozdělení jediného řetězce na několik částí

• zjištění, zda se ve vstupním řetězci vyskytuje určitá posloupnost znaků a pokudano tak kolikrát.

• Zobrazení řetězce uloženého v jediné proměnné typu String na několika řádcích.

Tyto a podobné úlohy budete muset řešit nejen při zpracovávání velkého množstvívstupních dat v textových souborech, ale i při standardní práci s databázovými daty.

Prvním příkladem, na němž si demonstrujeme práci s daty, bude aplikace, která přečtekřestní jméno a příjmení zadané v jednom textovém poli, rozpozná křestní jméno od pří−jmení a každé zvlášť zapíše do jiného TextBoxu.

Budeme předpokládat, že jméno i příjmení je vždy právě jedno slovo.

Proto otevřete prostředí Visual Basicu a založte nový projekt s jediným formulářem.Umístěte na něj ovládací prvky tak, jak vidíte na obr. 22.

obr. 22 Nový formulář pro demonstraci práce s řetězci 49

Názvy textových polí odshora dolů pojmenujte podobně jako jejich popisky: txtCele,txtKrestni, txtPrijmeni. Ovládací prvek CommandButton pojmenujte cmdRozdel.

Aplikace bude mít jednu jedinou funkci – jméno zapsané do pole txtCele rozdělí do dvoudalších polí. K tomu poslouží dvě událostní procedury:

Private Sub cmdRozdel_Click()

Dim Cele As String

Dim Prijmeni As String

Dim Krestni As String

Dim Pozice As Integer

Cele = Trim(txtCele.Text)

If Cele = „“ Then

MsgBox “Není vloženo jméno!“

Exit Sub

End If

Pozice = InStr(Cele, “ “)

If Pozice = 0 Then

MsgBox “Musí být vloženo napsat křestní jméno i příjmení!“

Exit Sub

End If

Krestni = Left(Cele, Pozice – 1)

Prijmeni = LTrim(Mid(Cele, Pozice))

Pozice = InStr(Prijmeni, “ “)

If Pozice <> 0 Then

MsgBox “Smí být vloženo pouze křestní jméno a příjmení!“

Exit Sub

End If

txtKrestni.Text = Krestni

txtPrijmeni.Text = Prijmeni

End Sub

Private Sub txtCele_Change()

txtKrestni.Text = ““

txtPrijmeni.Text = ““

End Sub

Procedura txtCele_Change zajišťuje pouze vymazání textových polí txtKrestni a txtPrijme−ni, kdykoli začne uživatel psát do pole txtCele.

UČEBNICE VISUAL BASICU 6.0

50

TIP:

Událost Change nastává nad každým ovládacím prvkem zpravidla ve chvíli, kdy se změní jehohodnota.

Procedura cmdRozdel_Click má deklarované tři řetězcové proměnné a jednu proměnnoudatového typu Integer. Nejprve se do proměnné „Celé“ uloží text zapsaný v textovém po−li txtCele, ovšem zbavený případných mezer na začátku a na konci celého řetězce.

Pokud není v poli txtCele vložen žádný text, bude vypsáno hlášení a příkazem Exit Subukončena činnost událostní procedury.

Novinkou je pro nás řádek kódu Pozice = InStr(Cele, “ “). Tento řádek přiřazuje do pro−měnné „Pozice“ číselnou pozici první mezery v řetězci uloženém do proměnné „Cele“.Funkce InStr je tedy vestavěnou funkcí Visual Basicu se dvěma argumenty: prvním je pro−hledávaný řetězec. Druhým pak řetězec znaků, který má být v prvním řetězci nalezen.

TIP:

V našem případě je druhým řetězcem jediný znak, funkci InStr ale můžete využít i pro vyhledává-ní celých posloupností znaků.

Funkce může obsahovat i třetí, nepovinný argument. Tento argument specifikuje typ po−rovnávání řetězců a může nabývat následujících hodnot:

0 – binární porovnávání (záleží na velikosti písmen)

1 – textové porovnávání (nezáleží na velikosti písmen)

2 – typ porovnávání je závislé na nastavení databáze

Pokud je tento třetí argument vynechán, použije se předdefinovaná hodnota 0 – tj. bi−nární porovnávání.

TIP:

Je možné nastavit typ prohledávání pro celý modul nebo projekt. Pokud to chcete udělat, defi-nujte předdefinovanou hdnotu třetího argumentu v sekci (General) příkazem Option Compare, zakterým následuje celé číslo v rozsahu od 0 do 2. Tato hodnota se pak použije jako předdefinova-ná nejen ve funkci InStr ale i v jiných funkcích pracujících s řetězci znaků – viz dále.

Funkce InStr vrací pořadové číslo prvního znaku, kterým začíná hledaný řetězec. Pokudhledaný řetězec není nalezen, návratová hodnota je 0. To znamená:

InStr(“Alfa beta“, „ „) vrací číslo 5,

InStr(“Leze leze po železe“, “leze“) vrací číslo 6

InStr(“Leze leze po železe“, “leze“, 1) vrací číslo 1

InStr(“Leze leze po železe“, “lze“) vrací číslo 0

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

51

Pokud tedy text v poli txtCele neobsahuje mezeru (tj. proměnná „Pozice“ má hodnotu0), znamená to, že nebylo zadáno celé jméno skládající se z křestního jména a příjmení.I v tomto případě se činnost procedury ukončí.

Další řádek kódu Krestni = Left(Cele, Pozice – 1) slouží k přiřazení křestního jména doproměnné „Krestni“. Je použita funkce Left, která vrací levý podřetězec zadaného texto−vého řetězce. Prvním argumentem je zadaný řetězec, druhým počet znaků zleva, kterémají být vráceny. V našem případě je vráceno křestní jméno, tedy všechny znaky až kedříve identifikované mezeře.

Zbytek řetězce by správně měl obsahovat příjmení s předřazenou mezerou. Proto se ten−to zbytek přiřadí do proměnné „Prijmeni“ na příkazovém řádku

Prijmeni = LTrim(Mid(Cele, Pozice))

Tento řádek obsahuje dvě funkce (Mid a LTrim) vnořené do sebe. Podle závorkové kon−vence obecně platné v matematice se nejprve provede vnitřní funkce Mid. Tato funkceslouží k výběru podřetězce ze zadaného řetězce.

Funkce Mid má obecně tři argumenty:

• prvním je řetězec znaků, z něhož se má podřetězec vytvořit

• druhým je pořadové číslo počátečního znaku v řetězci – tj. pozice, od které mázačínat podřetězec

• třetí argument je volitelný a udává počet znaků, které mají být v podřetězci vrá−ceny. Pokud tento argument není uveden (jako v našem případě), vrátí se všech−ny znaky do konce řetězce.

Příklady

Mid (“Leze leze po železe“, 6) vrací „leze po železe“

Mid (“Leze leze po železe“, 6, 9) vrací „leze po ž“

Podřetězec, který vrací funkce Mid, vstupuje jako jediný argument do funkce LTrim. Ta−to funkce, podobně jako výše uvedená funkce Trim, zbavuje řetězec mezer – tentokrátvšak pouze těch, které jsou uvedeny před prvním znakem, který není mezera.

TIP:

Stejně jako LTrim existuje také funkce RTrim, která zbavuje řetězec mezer, které jsou umístěnyna konci řetězcového argumentu funkce.

Pokud i po této akci obsahuje řetězec uložený v proměnné Prijmeni mezeru, znamenáto, že příjmení sestává nejméně ze dvou slov, což je v předpokladech naší aplikace ne−přípustné. Proto poslední podmínka zjišťuje, zda jako celé jméno byla zadána ne vícenež dvě slova. Teprve v případě, že je vše v pořádku, přiřadí se hodnoty proměnných„Krestní“ a „Prijmeni“ do polí txtKrestni a txtPrijmeni.

UČEBNICE VISUAL BASICU 6.0

52

TIP:

Adekvátně k funkci Left existuje také funkce Right, která vrací pravý podřetězec z udaného ře-tězce. Syntaxe této funkce je:

Right(prohledávaný_řetězec, počet_vrácených_znaků_zprava)

Např.:

Right(“Leze leze po železe“, 6) vrací „železe“

obr. 23 Spuštěná aplikace.

Otázky a úkoly:

1. Napište příklad uváděný v této lekci do programového prostředí Visual Basicu a vy−zkoušejte zadat různé textové řetězce do pole txtCele. Zkuste vždy předem odhad−nout, jak se program zachová po klepnutí na tlačítko cmdRozdel.

2. V příkladu je použita funkce Mid. Nahraďte ji v programovém kódu funkcí Righttak, aby funkčnost programu zůstala nezměněna.

3. Jak bude procedura cmdRozdel_Click pracovat v případě, že mezi jménem a pří−jmením nebude pouze jedna, ale libovolný větší počet mezer? Proč?

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

53

Lekce 6

DDaallššíí ffuunnkkccee aa ppookkrrooččiilláá pprrááccee ss řřeettěězzcciiCíle lekce:

Naučit se používat všechny vestavěnéfunkce Visual Basicu pro práci s řetězciznaků, formátování řetězců, vysvětlena bu−de i konverze číselných datových typů nařetězce a obráceně.

Práce s řetězci znaků je při programování velice častá. Ukázali jsme si to na jednodu−chém příkladu v předcházející lekci. Nyní se naučíme používat další z velkého množstvífunkcí pro konverzi řetězců, formátování a další manipulaci s nimi.

Prvním bude funkce pro porovnávání řetězců. Pokud porovnáváte dva řetězce, můžetesamozřejmě použít jednoduché operátory „je větší“ (>) nebo „je menší“ (<). Mnohemefektivnější je ovšem použití funkce StrComp.

TIP:

Dva řetězce se porovnávají podle kódových čísel svých počátečních znaků – stejným způsobemprobíhá v počítači rovnání podle abecedy. Pamatujte si – číslice jsou v kódové tabulce před velký-mi i malými písmeny Asc(“0“) = 48, Asc(“A“) = 65, Asc(“a“) = 97. Několik příkladů:

• „ZLO“ je pro počítač menší než „zlo“.

• „aabb“ je větší než „aa“

• „01alfa“ je menší než „Alfa01“

Funkce StrComp má následující syntaxi:

StrComp(string1, string2[, typ_porovnani])

První dva argumenty jsou povinné a představují dva porovnávané řetězce. Třetí argumentje nepovinný a představuje definici toho, jakým způsobem se budou oba řetězce porov−návat – jeho význam byl popsán v předcházející lekci u výkladu věnujícího se funkciInStr.

Výsledkem porovnávání mohou být tyto hodnoty:

• string1 je menší než string2, funkce vrací hodnotu −1

• string1 je roven string2, funkce vrací hodnotu 0

• string1 je větší než string2, funkce vrací hodnotu 1

• string1 nebo string2 má hodnotu Null, funkce vrací hodnotu Null

55

Pokud potřebujete naplnit řetězcovou proměnnou jedinou hodnotou, použijte funkciString. Tato funkce má dva argumenty – počet opakování a znak, který se má opako−vat.

Např.:

String(5, “r“) vrací „rrrrr“

TIP:

Podobnou funkcí jako String je funkce Space. Tato funkce vrátí zadaný počet mezer. TedyString(5, “ “) pracuje stejně jako Space(5).

Velice užitečnou funkcí je také možnost zjištění počtu znaků v řetězci (délky řetězce)funkcí Len. Funkce má jediný argument – řetězec, jehož délka se zjišťuje.

Např.:

Len(„Alfa“) vrací hodnotu 4

LSet, RSet

Tyto funkce jsou vhodné pro opakované naplnění řetězcové proměnné tak, aby velikostřetězce (Hodnota funkce Len) zůstala stále stejná. Pokud je nový řetězec kratší, bude za−rovnán vlevo (LSet), resp. vpravo (RSet). Zbytek řetězce bude doplněn mezerami.

Např.:

MujString = “0123456789“

LSet MujString = “<-Left“

Po provedení těchto dvou řádků bude proměnná MujString obsahovat hodnotu „<−Left“

MujString = “01234“

LSet MujString = “<-Left“

Po provedení těchto dvou řádků bude proměnná MujString obsahovat hodnotu „<−Lef“

MujString = “0123456789“

RSet MujString = “Right->“

Po provedení těchto dvou řádků bude proměnná MujString obsahovat hodnotu „Right−>“

TIP:

Jistě jste si všimli, že pokud chcete zobrazit uživateli nějakou zprávu pomocí funkce MsgBox, jetato zpráva zobrazena vždy na jeden řádek. Pokud chcete zprávu rozdělit na více řádků, musítedo zobrazovaného textu zakomponovat speciální řídící znak pro konec odstavce. Tento znak mákódové číslo 13. Zkuste tedy zapsat:

MsgBox “První řádek“ & Chr(13) & “Druhý řádek“, vbInformation, “Víceřádková zpráva“

UČEBNICE VISUAL BASICU 6.0

56

obr. 24 Víceřádková zpráva zobrazená funkcí MsgBox

Kromě uvedených funkcí pro práci s řetězci můžeme ve Visual Basicu používat takémnožství konverzních funkcí. Tyto funkce konvertují datový typ svého argumentu na ji−ný – většinou se konvertuje datový typ String na některý z číselných typů nebo naopak.

Asc

Argumentem funkce Asc je řetězec znaků. Funkce vrací hodnotu Integer, která odpoví−dá kódu prvního znaku v řetězci. Vrácená hodnota je z oboru 0 – 255.

Např.:

Asc(„Alfa“) vrací hodnotu 65.

Chr

Inverzní funkcí je funkce Chr, jejímž argumentem je celé číslo 0 – 255. Funkce vrací znakodpovídající udanému kódu.

Např.:

Chr(65) vrací velké A.

Chr(Asc(„Alfa“)) vrací velké A.

CStr

Výsledkem funkce je vždy textový řetězec.

• pokud je argumentem funkce hodnota typu Boolean, je výsledkem řetězec „True“nebo „False“,

• pokud je argumentem funkce hodnota typu Date, je výsledkem datum v krátkémformátu datumu. Přesný formát závisí na nastavení Místních nastavení v Ovláda−cích panelech,

• pokud je argumentem funkce libovolná číselná hodnota, bude tato hodnota vrá−cena ve formě řetězce.

Např.:

CStr(#12/30/99#) vrací “30.12.1999“, pokud máte nastavené české prostředí

Format

Mnohem příjemnější funkcí pro formátování datumů, čísel nebo řetězců je Format. Přijednodušším použití této funkce je prvním argumentem formátovaný řetězec, druhýmpak specifikace formátu, do kterého se má řetězec přeformátovat.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

57

Např.:

Format(148.9, “###0.00“) vrací „148,90“ pokud máte v Místních nastaveních v Ovláda−cích panelech nastaven desetinný oddělovač na čárku. (Znak # je zástupným znakem prolibovolnou číslici).

Format(“Alfa“, “<“) vrací „alfa“. Řetězec je převeden na malá písmena. Funkce je shodnás funkcí LCase(“Alfa“). LCase je speciální funkce pro převod argumentu na malá písmena.

Format(“Alfa“, “>“) vrací „ALFA“. Řetězec je převeden na velká písmena. Funkce jeshodná s funkcí UCase(“Alfa“). UCase je speciální funkce pro převod argumentu na vel−ká písmena.

Format(Now, “hh:mm“) vrací např. „17:04“ podle právě aktuálního systémového času po−čítače, na němž je program spuštěn.

TIP:

Funkce Now zjišťuje aktuální datum a čas ve chvíli, kdy byla zavolána.

Např.: „6.3.2000 09:28:17“

Str

Funkce Str pracuje podobně jako funkce CStr – převádí číselný argument na řetězcovouhodnotu. Na rozdíl od funkce CStr interpretuje funkce Str jako oddělovač desetinnýchmíst pouze tečku.

Val

Tato funkce je inverzní k funkci Str. Funkce Val očekává řetězcový argument a vrací čí−selnou hodnotu obsaženou v řetězci.

Např.:

Val(“ 2 56 7“) vrací 2567.

Val(“37 and 57“) vrací 37.

Na závěr lekce jeden užitečný příklad. Funkci, která nahradí všechny výskyty jednohopodřetězce jiným v rámci delšího textu, si musí programátor naprogramovat sám. Uve−dená funkce je zcela obecná. Používá některé programátorské obraty, které budou vys−větleny v následujících lekcích.

Public Function ReplaceString(strTextIn As String, strFind As String, _

strReplace As String, fCaseSensitive As Boolean) As String

Dim strTmp As String

Dim lngPos As Long

Dim intCaseSensitive As Integer

On Error GoTo PROC_ERR

intCaseSensitive = IIf(fCaseSensitive, 0, 1)

UČEBNICE VISUAL BASICU 6.0

58

strTmp = strTextIn

lngPos = InStr(1, strTmp, strFind, intCaseSensitive)

Do While lngPos > 0

strTmp = Left$(strTmp, lngPos – 1) & _

strReplace & _

Mid$(strTmp, lngPos + Len(strFind))

lngPos = InStr(lngPos + Len(strReplace), _

strTmp, _

strFind, _

intCaseSensitive)

Loop

ReplaceString = strTmp

PROC_EXIT:

Exit Function

PROC_ERR:

MsgBox “Error: “ & Err.Number & “. “ & Err.Description, , _

“ReplaceString“

Resume PROC_EXIT

End Function

Funkce očekává čtyři argumenty – první je textový řetězec, v rámci něhož se bude na−hrazovat. Druhý je podřetězec, který bude vyhledáván a nahrazován. Třetí je podřetězec,kterým se bude nahrazovat. Poslední argument je typu Boolean – True znamená, žeprohledávání bude rozlišovat velká a malá písmena, False nikoli.

Např.

ReplaceString(“Leze leze po železe“, “leze“, “+++“, False) vrací „+++ +++ po že+++“

ReplaceString(“Leze leze po železe“, “leze“, “+++“, True) vrací „Leze +++ po že+++“

Z uvedených příkladů vidíte, že nahrazovaný a nahrazující řetězec nemusejí být stejnědlouhé.

Otázky a úkoly:

1. Projděte si pečlivě funkci ReplaceString a pokuste se pochopit, jak funguje.

2. Naprogramujte funkci Mid použitím funkcí Left, Right a Len.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

59

Lekce 7

PPřřííssttuupp kk tteexxttoovvýýmm ssoouubboorrůůmm aa mmaanniippuullaaccee ss nniimmii

Cíle lekce:

Naučit se zpracovávat textové soubory a po−užívat nástroje pro jejich správu a vytváření.

Zpracování textových souborů je jednou z nejčastějších programátorských úloh. V minu−lých lekcích jsme se naučili pracovat s textovými řetězci, ze kterých se textové souboryskládají. Nyní se podíváme na texty v širším kontextu.

Před tím, než je možné ze souboru číst nebo do něho zapisovat, je nutné ho nejprve ote−vřít. K tomu slouží příkaz Open. Jeho nejjednoduší použití vypadá takto:

Open cesta For mode As [#]cislo_souboru

Za příkazem Open je povinný argument cesta, který označuje cestu k souboru, který sebude používat – např.: „c:\dokumenty\soubor.txt“.

TIP:

Pokud zadáte pouze název souboru (např.: soubor.txt), musí být tento soubor umístěn v právě ak-tivním adresáři.

Argument mode je také povinný a označuje mód, ve kterém bude soubor otevřen. Pro−gramátor má k dispozici následující módy:

• Append – otevření souboru pro připojení (zápis) nových znaků do souboru.Pouze sekvenčně

• Input – otevření souboru pro čtení. Pouze sekvenčně

• Output – otevření souboru pro zápis. Pouze sekvenčně

• Random – otevření souboru pro nesekvenční přístup

• Binary – otevření souboru pro binární přístup. V tomto případě může soubor ob−sahovat nejen text ale i binární data.

TIP:

Pokud je soubor otvírán v režimu Append, Binary, Output nebo Random a v udané cestě neexis-tuje, bude nově vytvořen.

TIP:

Pokud je soubor otevřen v jednom z módů Binary, Input nebo Random, je možné jej otevřít zno-vu příkazem Open s použitím jiného čísla souboru, aniž by bylo nutné jej nejprve zavřít. Při otevře-ní v módech Append a Output je nutné nejprve soubor zavřít příkazem Close.

61

Příklady otevření textového souboru:

Příkaz otevření souboru test.txt v sekvenčním Input módu:

Open “test.txt“ For Input As #1

Příklad otevření souboru v binárním módu. Bude povolen pouze zápis.

Open “test.txt“ For Binary Access Write As #1

Příklad otevření souboru pro sekvenční zápis. Klíčové slovo Shared umožní kterémuko−li jinému procesu číst nebo zapisovat do souboru.

Open “test.txt“ For Output Shared As #1

Příklad otevření souboru v binárním módu pouze pro čtení. Jiné procesy nemohou z to−hoto souboru číst (nastevení klíčovými slovy Lock Read), dokud první proces neuzavřesoubor příkazem Close.

Open “test.txt“ For Binary Access Read Lock Read As #1

Čtení a zápis dat do textového souboru se realizuje pomocí funkcí Input (čtení) a Write(zápis).

Zde uveďme příklad zápisu do nového textového souboru:

Open “test.txt“ For Output As #1

Write #1, “Text“, 234

Write #1,

První řádek vytvoří nový soubor test.txt, druhý řádek do něho zapíše dvě hodnoty od−dělené čárkou – stringovou hodnotu „Text“ (včetně uvozovek) a číselnou hodnotu 234.

Poslední řádek vloží do textového souboru prázdný řádek.

TIP:

Všimněte si, že každé použití funkce Write představuje zápis samostatného řádku do výstupníhotextového souboru.

TIP:

Datumy a hodnoty typu Boolean se zapisují ve zvláštním formátu bez ohledu na místní nastavenípočítače. Např. následující kód:

Open “d:\TESTFILE.txt“ For Output As #1

Write #1, Now

Write #1, True

vede k zápisu těchto hodnot do textového souboru:

#2000-03-07 13:18:51#

#TRUE#

Příklad čtení z textového souboru funkcí Input:

UČEBNICE VISUAL BASICU 6.0

62

Open “test.txt“ For Input As #1

Do While Not EOF(1)

Input #1, MyString, MyNumber

Debug.Print MyString, MyNumber

Loop

Close #1

Příklad předpokládá, že každý řádek souboru test.txt obsahuje dvě hodnoty. Smyčka Dobude probíhat tak dlouho, dokud nebude dosažen konec souboru, jehož číslo je 1. Po−užití funkce EOF (End of File) ke zjištění konce souboru je při zpracování textových nebobinárních souborů velmi obvyklé.

TIP:

Příkaz Debug.Print se používá při ladění programu pro tisk hodnot do okna Immediate, které sepři spuštění programu v prostředí Visual Basicu objeví, pokud do něho program zapisuje (viz obr.25). Lze jej zobrazit také explicitně příkazem menu View/Immediate Window.

obr. 25 Okno Immediate se zobrazenými hodnotami.

TIP:

Je možné číst také jednotlivé znaky ze souborů otevřených pro sekvenční přístup:

Open “d:\TESTFILE.txt“ For Input As #1

Do While Not EOF(1)

strRetez = Input(1, #1)

Loop

Close #1

Argumenty funkce Input jsou řazeny postupně – počet znaků, které se mají číst, číslosouboru, ze kterého se čte.

TIP:

Je možné také zjišťovat aktuální pozici v souboru. Zkuste kód z předcházejícího tipu obohatito příkaz Seek určený pro zjištění aktuální pozice v souboru:

Open “d:\TESTFILE.txt“ For Input As #1

Do While Not EOF(1)

strRetez = Input(1, #1)

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

63

Debug.Print Seek(1)

Loop

Close #1

Čtení a zápis dat do binárního souboru se realizuje pomocí funkcí Get (čtení) a Put (zá−pis).

Přístup do binárních souborů je realizován trochu odlišným způsobem než přístup dosouborů textových. Vysvětleme si to na následujícím příkladu:

Private Type Record

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record

Dim RecordNumber as Variant

‘ Open file for random access.

Open “TESTFILE.txt“ For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5

MyRecord.ID = RecordNumber

MyRecord.Name = “My Name“ & RecordNumber

Put #1, RecordNumber, MyRecord

Next RecordNumber

Close #1

U binárních souborů je zapotřebí definovat záznam (Record), který bude „datovou jed−notkou“ zápisu a čtení z tohoto souboru. Velikost záznamu se musí udat již při otevírá−ní souboru – viz Len = Len(MyRecord) v příkazu Open. Proměnná MyRecord je datové−ho typu Record – ten je předem zadefinován jako uživatelský typ pomocí klauzule Ty−pe. Funkce Len zjistí jeho velikost a zjištěnou hodnotu přiřadí parametru Len příkazuOpen. Následující smyčka For zapíše 5 záznamů do souboru TESTFILE.txt

Podobným způsobem je potom možné číst obsah takto vytvořeného souboru:

Private Type Record

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record

Dim Position as Integer

Open “TESTFILE.txt“ For Random As #1 Len = Len(MyRecord)

Position = 3

Get #1, Position, MyRecord

Close #1

Debug.Print MyRecord.ID

Debug.Print MyRecord.Name

UČEBNICE VISUAL BASICU 6.0

64

Příklad použití funkce Get dokumentuje skutečnost, že binární soubory (otevřené v mó−du Binary nebo Random) není nutné číst sekvenčně od začátku. Uvedený příklad přečtepouze třetí záznam v pořadí.

TIP:

Druhý argument funkce Get (pořadové číslo záznamu) je nepovinný. Pokud je vynechán, (např.Get #1, , MyRecord), je přečten záznam na aktuální pozici. Pořadové číslo aktuálního záznamu jemožné získat podobně jako u sekvenčních souborů použitím funkce Seek. Po přečtení záznamu seaktuální pozice přesune vždy na následující záznam. Přesvědčte se o tom tím, že přidáte do kóduřádek Debug.Print Seek(1) bezprostředně za příkaz Get.

JJaakk vvyyuužžíítt WWoorrdd pprroo kkoonnttrroolluu pprraavvooppiissuu??Se zpracováním textových souborů souvisí i využití ostatních aplikací Office, konkrétněWordu. Ze svého programu ve Visual Basicu můžete volat objekty a vlastnosti ostatníchaplikací Office, které mají v sobě zabudován tzv. Visual Basic for Applications. Obecněřečeno je nutné:

• mít nainstalovaný Word (příp. Excel apod.) na počítači, kde spouštíte své programy

• v programu vytvořit instanci Wordu (Excelu)

Pak můžete začít používat objekty Visual Basicu for Applications. Ukážeme si konkrétnípříklad využití kontroly pravopisu pro text zapsaný do TextBoxu.

Založte nový projekt a vytvořte formulář podle obrázku č. 26.

obr. 26 Formulář pro kontrolu pravopisu

Na formuláři je TexBox (s názvem Text1) a dvě příkazová tlačítka – Kontrola (Com−mand1) a Konec (Command2).

Programový kód je velice jednoduchý a je obsažen pouze ve dvou událostních procedurách:

Private Sub Command1_Click()

Dim X As Object

Set X = CreateObject(“Word.Application“) ‘ Vytvořit instanci Wordu

X.Visible = False ‘ skrýt Word

X.Documents.Add ‘ otevřít nový dokument

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

65

X.Selection.Text = Text1.Text ‘ zkopírovat obsah TextBoxu dodokumentu

X.ActiveDocument.CheckSpelling ‘ spustit kontrolu gramatiky

Text1.Text = X.Selection.Text ‘ zkopírovat výsledky zpět

‘ Neukládat dokument při zavírání

X.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

X.Quit ‘ zavřít Word

Set X = Nothing ‘ uvolnění paměti

End Sub

První řádek definuje objektovou proměnnou X.

TIP:

Hodnotou objektové proměnné může být odkaz na libovolný objekt (např. instanci Wordu, DLL kni-hovny atp.). Přiřazení tohoto odkazu musí být realizováno pomocí příkazu Set. Potom, co se ob-jekt přestane používat, musí se do objektové proměnné přiřadit hodnota Nothing. Tím se uvolnípaměť, kterou instance objektu v počítači zabírala.

Po spuštění Wordu se nejprve otevře nový dokument a zkopíruje se obsah TextBoxu dotohoto dokumentu. Po spuštění kontroly pravopisu je ovládání změn stejné jako ve Wor−du. Opravy se provádějí do skrytého dokumentu Wordu, a proto je po skončení kontro−ly pravopisu nutné překopírovat obsah tohoto dokumentu zpět do TextBoxu.

Následuje již pouze zavření aktivního dokumentu (hodnota wdDoNotSaveChanges udá−vá, že obsah dokumentu se nemá ukládat), zavření Wordu a uvolnění paměti počítače.

Druhá událostní procedura se vztahuje ke druhému příkazovému tlačítku (Konec) a slou−ží pouze k ukončení programu.

Private Sub Command2_Click()

End

End Sub

NNaahhrraazzoovváánníí tteexxttuuPodobným způsobem, jakým jsme použili z Wordu nástroj pro kontrolu pravopisu, mů−žeme využít i další nástroje – třeba pro nahrazování textu.

V novém projektu vytvořte nejprve formulář podle obr. 27.

UČEBNICE VISUAL BASICU 6.0

66

obr. 27 Formulář pro prezentaci nahrazování textu

Formulář obsahuje textová pole Text1 (pro zadání prohledávaného textu), Text2(TextBox označený jako „Najít co:“) a Text3 (TextBox „Nahradit čím:“) a dvě příkazovátlačítka – Command1 (s titulkem „Nahradit“) a Command2 („Konec“).

Díky využití aplikace Word bude programový kód opět velice jednoduchý:

Private Sub Command1_Click()

Dim X As Object

Set X = CreateObject(“Word.Application“)

X.Visible = False

X.Documents.Add

X.Selection.Text = Text1.Text

With X.Selection.Find ‘spustit hledání k nahrazování

.ClearFormatting ‘ ignorovat formátování

.Text = Text2.Text ‘ hledaný text

.Replacement.ClearFormatting

.Replacement.Text = Text3.Text ‘ text, jímž se nahrazuje

.Execute Replace:=wdReplaceAll, Forward:=True, _

Wrap:=wdFindContinue

End With

Text1.Text = X.Selection.Text

X.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

X.Quit

Set X = Nothing

End Sub

Nová je zde pouze sekce příkazu Width. Pomocí klauzule ClearFormatting určíme, žeslova se mají vyhledávat bez ohledu na jejich formátování (font, velikost atp.). Hledanýtext vezmeme z textového pole Text2, text, jímž se bude nahrazovat, z pole Text3. Ná−

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

67

sledující metoda Execute wordovského objektu Find se spouští s parametry pro nahraze−ní všech výskytů (Replace:=wdReplaceAll), prohledávání textu probíhá v dokumentusměrem dolů (Forward:=True).

Zbytek programového textu je stejný jako v případě kontroly pravopisu.

Uvědomte si, že nevýhodou používání ostatních aplikací Office ve vašich programech jenutnost instalace Office na počítači, kde se program spouští a také fakt, že při déletrva−jících operacích může volaná aplikace Office rušivě probliknout na pracovní plochu,i když její vlastnost Visible je nastavena na hodnotu False.

Otázky a úkoly:

1. Zkuste použít kód

Open “test.txt“ For Input As #1

Do While Not EOF(1)

Input #1, MyString, MyNumber

Debug.Print MyString, MyNumber

Loop

Close #1

na textový soubor, který bude obsahovat více než dvě položky na jednom řádku, pří−padně prázdné řádky atd.

3. Podívejte se v prohlížeči NotePad na soubory vytvořené v textovém režimu (módOutput) a v režimu binárním (mód Random). Jaký je mezi nimi na první pohledrozdíl?

4. V lekci je popsán příklad pro kontrolu pravopisu. Jakým způsobem by za použitíWordu bylo možné kontrolovat gramatiku?

UČEBNICE VISUAL BASICU 6.0

68

Lekce 8

PPřřííssttuupp kk ddaattůůmmCíle lekce:

Naučit se přistupovat k datům v databázia manipulovat s nimi – číst, zapisovat a ak−tualizovat tato data.

Programování aplikací pro přístup k datům jsou v současnosti vůbec nejžádanější. Visu−al Basic poskytuje několik nástrojů, které poskytují přístup do databází nejrůznějšího ty−pu. V této a následující lekci si popíšeme nejpoužívanější z těchto způsobů.

K tomu, abyste si mohli vyzkoušet programový kód obsažený v těchto lekcích, je nutné,abyste měli nainstalován Microsoft Access nebo abyste alespoň měli možnost vytvořit da−tabázi Accessu a umístit ji na svůj počítač.

Vždy před tím, než můžete začít komunikovat s daty v databázi, je nutné založit komu−nikační kanál mezi programem zobrazujícím data a databází. Při programování ve Visu−al Basic můžete v zásadě používat dva druhy těchto kanálů – ODBC a DAO. V této osmélekci se budeme zabývat přístupem k databázi přes ODBC.

V první fázi vytvoříme databázi Accessu, ke které budeme programovou aplikací přistu−povat. Vytvořte tedy databázi MDB, která bude obsahovat jedinou tabulku „Pracovnik“podle obrázku 28.

obr. 28 Definice tabulky Pracovnik v Accessu.

69

Tabulka bude obsahovat následující pole:

• ID – primární klíč tabulky

• Jmeno (datový typ Text) – Křestní jméno pracovníka

• Prijmeni (datový typ Text) – Příjmení pracovníka

• Titul (datový typ Text) – Titul pracovníka

• Plat (datový typ Číslo) – Plat pracovníka v korunách

• Poznámka (datový typ Memo) – Další textové údaje o pracovníkovi.

Databázi uložte pod názvem DB1.MDB např. do adresáře c:\databaze

Při použití ODBC spojení s databází můžeme použít dva přístupy:

1. nadefinovat DSN (Data Source Name) v Ovládacích panelech systému Windows

2. tzv. DSN−less připojení bez nutnosti jakékoli definice v Ovládacích panelech.

TIP:

Oba typy spojení jsou při programování běžné. První má výhodu v trochu rychlejší tvorbě připo-jení samotnou aplikací, druhé zase v nezávislosti na definici DSN v Ovládacích panelech. Ukážemesi v této lekci postupně oba způsoby.

Nejprve tedy vytvoříme DSN záznam v Ovládacích panelech. Otevřte Ovládací panely sy−stému Windows a poklepejte na ikonu ODBC. Na kartě System DSN (viz obr. 29) klep−něte na tlačítko „Přidat“.

obr. 29 Definice systémového DSN.

V dalším okně se vybírá typ databáze, na kterou má DSN ukazovat. V našem případě vy−berte řádek „Microsoft Access Driver (*.mdb)“ a klepněte na tlačítko „Dokončit“.

UČEBNICE VISUAL BASICU 6.0

70

obr. 30 Výběr databázového ovladače

Popisek „Dokončit“ na tlačítku je trochu zavádějící, protože definice DSN tím zdaleka ne−končí. Na obr. 31 je další dialogové okno, kde konečně přistoupíme k záznamu o spo−jení s konkrétní databází.

obr. 31 Definice připojení k databázi DB1.MDB

Do pole s označením „Data Source Name“ vepište název, pomocí kterého budeme poz−ději vytvářet komunikační kanál s databází. Následující pole je vyhrazeno pro popis. Tla−čítko „Select“ slouží k výběru konkrétního MDB souboru. Klepněte tedy na toto tlačítkoa ze stromové struktury adresářů zvolte dříve vytvořený soubor db1.mdb.

Po potvrzení tlačítkem „OK“ se nově definované DSN objeví mezi ostatními v okně naobrázku 29.

Nyní přistupme k tvorbě samotné aplikace. Založte tedy nový projekt ve Visual BasicuStandard EXE a založte v něm tři formuláře:

• Form1 pro zadávání nových dat do databáze

• Form2 pro zobrazování dat z databáze

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

71

• FormMain pro přepínání mezi oběma výše uvedenými formuláři

Nejjednodušším bude pro nás formulář Form1, který se bude skládat pouze ze známýchovládacích prvků – viz obr. 32.

obr. 32 Formulář pro zadávání nových údajů do databáze.

Jednotlivá pole mají názvy:

• txtJmeno

• txtPrijmeni

• txtTitul

• txtPlat

• txtPoznamka

Jako druhý vytvořte formulář FormMain pro přepínání mezi Form1 a Form2. Viz obr. 33.

obr. 33 Hlavní formulář aplikace

Formulář je velice jednoduchý – obsahuje pouze 2 tlačítka. První z nich bude zobrazo−vat formulář Form1, druhé Form2.

K událostní proceduře OnClick prvního tlačítka připojte následující kód:

Dim frm As New Form1

frm.Show vbModal, Me

Set frm = Nothing

Tento kód nejprve zakládá novou instanci formuláře Form1 a odkaz na ni ukládá do lo−kální proměnné frm. Následuje volání metody Show, která tento formulář zobrazí.

UČEBNICE VISUAL BASICU 6.0

72

TIP:

Následující parametry vbModal a Me určují, že formulář bude modální vzhledem k formuláři, zekterého je volán. Modální formulář znamená, že dokud uživatel neukončí práci ve Form1, budoupro něho ostatní části aplikace nedostupné.

Poslední řádek přiřazuje proměnné frm hodnotu Nothing a uvolňuje tak formulář Form1z paměti.

TIP:

Bylo by možné zobrazit formulář Form1 také jednoduše jediným řádkem kódu:

Form1.Show

Tento přístup má však tu nevýhodu, že po ukončení práce ve formuláři Form1 se neuvolní paměťpočítače, kterou zabíral. Ta se uvolní teprve po ukončení celé aplikace. Při vícenásobném zavíránía otvírání tohoto formuláře v rámci jediného spuštění celé aplikace by stále rostly nároky na pa-měť.

Podobně k druhému tlačítku připojte kód zobrazující formulář Form2, který vytvořímepozději:

Dim frm As New Form2

frm.Show vbModal, Me

Set frm = Nothing

Nyní máme již hotový základ celé aplikace a dostáváme se ke stěžejní otázce: Jak vytvo−řit připojení do databáze? Musíme nejprve vytvořit komunikační kanál pro manipulacis daty:

V prvním kroku je nutné přidat do referencí projektu odkaz na Microsoft Remote DataObject 2.0. Zvolte tedy z menu Visual Basicu příkaz Project/References. V okně naobr. 34 zatrhněte zmíněný řádek. Celou akci potvrdte tlačítkem „OK“.

obr. 34 Nastavení referencí na Microsoft RDO.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

73

Tím máme připravenu půdu pro použití metody OpenConnection, která otevírá komu−nikační kanál s databází. Nejprve se podíváme na syntaxi této metody:

Set connection = environment.OpenConnection(dsName[, prompt[, readonly[, connect[, options]]]])

Popis:

connection objektová proměnná ukazující na objekt typu rdoConnection s defi−nicí spojení

environment objektová proměnná odkazující na existující objekt typu rdoEnvi−ronment

dsName název DSN, které jsme založili v Ovládacích panelech Windows

prompt konstatnta, která definuje, zda se metoda bude dotazovat uživatelena DSN či nikoli

readonly hodnota Boolean, která určuje, zda připojení k databázi bude pou−ze pro čtení (hodnota True) nebo i pro zápis (False). Pokud tentoparametr není uveden, bere se implicitně hodnota False

connect řetězec obsahující dodatečné informace o připojení, pokud je jichtřeba (typicky např. uživatelské jméno a heslo pro přístup do data−báze)

options tento parametr může obsahovat konstantu rdAsyncEnable proasynchrnonní přenos dat

TIP:

Pokud se má z databáze do volající apliace vrátit velký objem dat, může tato operace zabrat i ně-kolik desítek sekund. Při tzv. synchronním módu připojení (který je implicitní) se zastaví běh celéaplikace, dokud nepřijme všechna data. Při nastavení asynchronního přenosu konstantourdAsyncEnable se data do aplikace předávají při dalším současném chodu aplikace. Pokud budetepoužívat asynchronní přenos dat, je možné zjistit, zda databáze už dodala všechna data či nikolizjištěním hodnoty vlastnosti StillConnecting objektu rdoConnection. Probíhající asynchronníkomunikaci je také možné ukončit metodou Cancel tohoto objektu.

Nyní můžeme konečně přistoupit k naprogramování připojení databáze. Založte v pro−jektu nový modul a vložte do něho kód:

Public cn As rdoConnection

Sub main()

Set cn = rdoEnvironments(0).OpenConnection(dsName:=“NovaDatabaze“, _

Prompt:=rdDriverNoPrompt)

FormMain.Show

End Sub

UČEBNICE VISUAL BASICU 6.0

74

TIP:

Metoda OpenConnection podporuje tzv. pojmenované argumenty. To znamená, že při volání me-tody nemusejí být její argumenty uváděny v přesně stanoveném pořadí, pokud jsou jim hodnotypřiřazovány pomocí znaku přiřazení (:=).

Dále je nutné zajistit, aby procedura main() byla nastavena jako startovací procedura ce−lé aplikace. To lze nastavit v okně na obr. 35.

obr. 35 Nastavení startovacího objektu celé aplikace

Okno zobrazíte příkazem nabídky Project/Properties. Startovací objekt se nastaví pomo−cí ComboBoxu s titulkem Startup Object.

Vzhledem k tomu, že máme již připravený formulář Form1, vrátíme se nyní k němu. Je−diná zajímavá procedura bude připojena k události OnClick tlačítka „Uložit“. Tato proce−dura musí shromáždit data z formuláře do patřičného tvaru a odeslat je do databáze. Tatoakce se praktikuje tvořením a spouštěním tzv. SQL dotazů, pomocí kterých se manipu−luje s daty v databázi. Proveďme tedy malou odbočku a podívejme se na možnosti do−tazů SQL podrobněji.

Otázky a úkoly:

1) Zkuste si založit i další DSN záznamy k databázím. K jakým jiným databázím (s vý−jimkou Accessu) můžete na vašem počítači definovat DSN connection?

2) Zkuste nakonfigurovat přístup do databáze db1.mdb tak, aby databáze vyžadovalapřístup s uživatelským jménem a heslem.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

75

Lekce 9

VVyyttvváářřeenníí SSQQLL ddoottaazzůůCíle lekce:

Naučit se vytvářet všechny druhy SQL dota−zů pro přístup do databáze a manipulacis daty

Jazyk SQL je speciální jazyk pro tvorbu dotazů, pomocí nichž se manipuluje s daty da−tabáze. Stejně jako v běžném životě na každý dotaz očekáváme odpověď, tak i databá−ze reaguje na každý SQL dotaz. Odpovědí může být to, že vrátí do volající aplikace sa−du dat k dalšímu zpracování, smaže nebo aktualizuje data v databázi, založí v databázinovou tabulku apod. V této lekci se seznámíme se všemi druhy SQL dotazů tak, abysteje uměli ve své další programátorské praxi již sami vytvářet.

PPřřííkkaazz SSEELLEECCTTJednoduché použití příkazu SELECT, které si zde nyní popíšeme, nereprezentuje plnousyntaxi ani sémantiku tohoto příkazu, přesto je dostatečně ilustrativní. Příkaz SELECTslouží k selekci (výběru) jednotlivých polí tabulky. Může být tedy použit jako výběrovýdotaz nebo kritérijní poddotaz v mřížce návrhu.

Velice zjednodušená syntaxe příkazu je následující:

SELECT [tabulka.]pole1 [AS alias1] FROM tabulkový výraz

Tento příkaz vybere z tabulky jedno pole (pole1), které bude ve výsledku dotazu zob−razeno pod hlavičkou (alias1).

Příklad:

SELECT Příjmení AS Prim FROM Zaměstnanci

Tento příkaz vybere pole Příjmení z tabulky Zaměstnanci a ve výsledku jej zobrazí podhlavičkou pole Prim.

Příklad:

SELECT Dodavatelé.Příjmení AS Prim, Jméno FROM Zaměstnanci

Příkaz vybere z tabulky Dodavatelé pole Příjmení a ve výsledku jej zobrazí pod hlavič−kou pole Prim. Zároveň vybere pole Jméno z tabulky Zaměstnanci. Výsledek dotazu te−dy bude obsahovat dvě pole: Prim a Jméno.

Příklad:

SELECT * FROM Zaměstnanci

77

Příkaz vybere všechny záznamy (a všechna pole) z tabulky zaměstnanci. Jedná se vlast−ně o kopii tabulky Zaměstnanci.

Příklad:

SELECT Count(*)As Počet FROM Zaměstnanci

Příkaz zobrazí počet záznamů tabulky zaměstnanci a zapíše jej do pole pod hlavičkouPočet. Výsledek dotazu tedy bude jediné číslo (jediný záznam o jediném poli).

Příklad:

SELECT Count (*) AS CelkemZaměstnanců,

Avg(Plat) AS PrůměrnýPlat,

Max(Plat) AS NejvyššíPlat FROM Zaměstnanci

Příkaz zobrazí počet zaměstanců a jejich průměrný a nejvyšší plat. Výsledek dotazu bu−de obsahovat jediný záznam o třech polích: CelkemZaměstnanců, PrůměrnýPlat a Nejvyš−šíPlat.

KKllaauuzzuullee IINNKlauzule IN slouží v jazyce SQL k definování cílové nebo zdrojové databáze (viz také pří−klad INSERT).

Příklad:

SELECT [Kód zákazníka], Firma

FROM [Oblast zákazníci] IN “c:\documenty\xldata.xls“ „EXCEL 5.0;“

Výběr z pojmenované oblasti excelovského dokumentu xldata.xls.

Příklad:

SELECT [Kód zákazníka] FROM Zákazníci IN External.mdb

Výběr pole Kód zákazníka (pokud název pole obsahuje mezeru, je třeba jej uzavřít dohranatých závorek), z tabulky Zákazníci v externí databázi.

FFrráázzee WWHHEERREEKlauzule Where určuje podmínku, kterou musejí splňovat definovaná pole, aby se na něvztahoval příkaz SELECT, UPDATE nebo DELETE.

Příklad:

SELECT * FROM Zaměstnanci WHERE ((([Zaměstnanci].Plat)>6500) AND ((Zaměstnan-ci.Nástup) Between #1/1/98# And #12/31/98#));

UČEBNICE VISUAL BASICU 6.0

78

Příkaz vrátí kompletní záznamy všech zaměstnanců, jejichž plat je vyšší než 6500 Kča kteří byli přijati v roce 1998.

FFrráázzee GGRROOUUPP BBYYFráze GROUP BY sloučí věty se stejnými hodnotami v zadaném seznamu polí do jedinévěty. Pokud zadáte v příkazu SELECT agregovanou funkci SQL, například Sum neboCount, vytvoří se pro každou větu souhrnná hodnota.

Příklad:

SELECT Funkce, Count([Funkce]) AS Počet FROM Zaměstnanci

GROUP BY Funkce

Tento příklad vytvoří seznam všech funkcí v zaměstnání a počet zaměstnanců pro kaž−dou funkci. Každá funkce bude ve výsledku dotazu zahrnuta jen jednou.

Příklad:

SELECT Funkce, Count(Funkce) AS Počet FROM Zaměstnanci WHERE Region = “Liberec“GROUP BY Funkce

Tento příklad vypočítá pro každou jedinečnou funkci v zaměstnání počet zaměstnancův Liberci, kteří mají takovou funkci.

FFrráázzee HHAAVVIINNGGFráze HAVING určuje, které věty seskupené pomocí fráze GROUP BY budou v příkazuSELECT zobrazeny.

Poté co fráze GROUP BY sloučí věty, fráze HAVING zobrazí všechny věty sesku−pené frází GROUP BY, které splňují podmínku fráze HAVING.

Příklad:

SELECT ČísloDodavatele, Avg(JednotkováCena) AS PrůměrnáCena

FROM Výrobky GROUP BY ČísloDodavatele

HAVING (Avg(JednotkováCena)>3200)

Výsledkem dotazu budou dodavatelé, jejichž výrobky mají průměrnou jednotkovou ce−nu vyšší než 3200 Kč.

FFrráázzee OORRDDEERR BBYYFráze ORDER BY setřídí věty výsledného dotazu podle zadaného pole nebo polí ve vze−stupném nebo sestupném pořadí.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

79

Příklad:

SELECT Příjmení, Jméno FROM Zaměstnanci ORDER BY Příjmení DESC

V tomto příkladu jsou záznamy zaměstnanců seřazeny sestupně (od Z do A) podle jejichpříjmení.

Příklad:

SELECT ČísloKategorie, NázevVýrobku, JednotkováCena FROM Výrobky ORDER BY Čí-sloKategorie, NázevVýrobku ASC

V tomto příkladu jsou záznamy seřazeny nejprve podle čísla kategorie a poté (tj. v rám−ci jedné kategorie) podle názvu výrobku vzestupně.

Příklad:

SELECT [Příjmení], [Jméno], [Funkce], [Plat] FROM [Zaměstnanci] WHERE [Plat] >=(SELECT AVG([Plat]) FROM [Zaměstnanci] WHERE ([Zaměstnanci].[Funkce] = “Obchodníředitel“) OR ([Zaměstnanci].[Funkce] = “Obchodní zástupce“))

Podle tohoto kritéria budou zobrazeny údaje těch zaměstnanců, jejichž plat je vyšší nežprůměrný plat zaměstnanců s funkcí Obchodního ředitele nebo zástupce.

DDeekkllaarraaccee WWIITTHH OOWWNNEERRAACCCCEESSSS OOPPTTIIOONNDeklarace WITH OWNERACCESS OPTION má svůj význam ve víceuživatelském prostře−dí se zabezpečením pracovní skupiny. Tuto deklaraci použijte společně s dotazem, kte−rý dává uživatelům používajícím nějaký dotaz stejná přístupová práva jako vlastníkovidotazu (o zabezpečení databáze a ošetření konfliktů se dočtete v závěru této knihy).Deklarace se vkládá na závěr SQL příkazu.

Příklad:

SELECT Příjmení, Jméno, Plat FROM Zaměstnanci ORDER BY Příjmení WITH OWNERACCESSOPTION

PPřřííkkaazz SSEELLEECCTT......IINNTTOOPříkaz SELECT...INTO je ekvivalentem vytvářecího dotazu. Výsledkem dotazu je vždy vy−tvoření nové tabulky:

Příklad:

SELECT Zaměstnanci.* INTO [Zaměstnanci-záloha]

IN “c:\dokumenty\extrnal.mdb“ FROM Zaměstnanci

UČEBNICE VISUAL BASICU 6.0

80

Vytvoření záložní kopie tabulky Zaměstnanci a její uložení do externí accessovské data−báze external.mdb. Klauzule IN je nepovinná – je samozřejmě možné vytvářet tabulkui v aktuální databázi.

OOppeerraaccee UUNNIIOONNOperace UNION je ekvivalentem sjednocovacího dotazu. Dotaz obsahující klíčové slovoUNION slučuje výsledky dvou či více nezávislých dotazů nebo tabulek.

Příklad:

SELECT Firma, Město FROM Dodavatelé WHERE Země = “USA“ UNION SELECT Firma, MěstoFROM Zákazníci WHERE Země = “USA“

Výsledek dotazu zobrazí názvy a domovská města všech firem USA, která jsou vzhledmk vám v dodavatelském či zákaznickém vztahu.

OOppeerraaccee IINNNNEERR JJOOIINNOperace INNER JOIN slučuje záznamy ze dvou tabulek za předpokladu, že se shodují je−jich hodnoty ve společném poli. Toto společné pole je do nového záznamu zahrnuto jenjednou. Jinak se záznam skládá ze všech polí obou tabulek. Jedná se tedy o slučovacídotaz.

Příklad:

SELECT DISTINCTROW Sum(JednotkováCena * Množství)

AS Prodej, Jméno & “ “ & Příjmení AS CeléJméno

FROM Zaměstnanci INNER JOIN(Objednávky INNER JOIN

Rozpis objednávek] ON Objednávky.ČísloObjednávky = [Rozpis objednávek].Čí-sloObjednávky)ON

Zaměstnanci.ČísloZaměstnance = Objednávky.ČísloZaměstnance GROUP BY Jméno & “ “& Příjmení

Uvedený trochu složitější SQL příkaz vytváří dvě ekvivalentní spojení: jedno mezi tabulka−mi Rozpis objednávek a Objednávky a druhé mezi tabulkami Objednávky a Zaměstnanci.Obě spojení jsou nezbytná, neboť tabulka Zaměstnanci neobsahuje data o prodeji a tabul−ka Rozpis objednávek neobsahuje informace o zaměstnancích. Výsledkem dotazu bude seznam zaměstnanců a celková suma, kterou získali prodejem.

OOppeerraaccee LLEEFFTT JJOOIINN aa RRIIGGHHTT JJOOIINNOperace LEFT JOIN a RIGHT JOIN slučují (zleva nebo zprava) záznamy ze zdrojové ta−bulky, jsou−li použity v nějaké klauzuli FROM. I tímto způsobem je můžete pomocí jazy−ka SQL definovat sjednocovací dotaz.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

81

Příklad:

SELECT [Jméno oddělení], Jméno & Chr(32) & Příjmení AS Jméno FROM Oddělení LEFTJOIN Zaměstnanci ON Oddělení.[Číslo oddělení] = Zaměstnanci.[Číslo oddělení]ORDER BY [Jméno oddělení]

Uvedený příklad předpokládá pole Jméno oddělení a Číslo oddělení v tabulce Zaměst−nanci. Tento příklad vybere všechna oddělení včetně těch, která nemají žádné zaměst−nance.

PPrreeddiikkááttyy AALLLL,, DDIISSTTIINNCCTT,, DDIISSTTIINNCCTTRROOWW,, TTOOPPPredikáty ALL, DISTINCT, DISTINCTROW, TOP blíže specifikují činnost dotazů, ve kte−rých jsou definovány. Používají se v souvislosti s příkazem SELECT. Jejich syntaxe je:

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]

FROM tabulka

Příklad:

SELECT DISTINCTROW JménoSpolečnosti FROM Zákazníci INNER JOIN Objednávky ON

Zákazníci.[Kód zákazníka] = Objednávky.[Kód zákazníka]

ORDER BY Firma

Použití predikátu DISTINCTROW vytvoří seznam společností, které mají alespoň jednuobjednávku, avšak bez podrobností o těchto objednávkách

Příklad:

SELECT TOP 25 Jméno, Příjmení FROM Studenti WHERE

RokUkončení = 1994 ORDER BY MaturitníPrůměr DESC

Dotaz vrátí 25 záznamů, ve výběru určeného frází ORDER BY. V tomto případě prvních25 záznamů seřazených sestupně.

Pokud neuvedete frázi ORDER BY, dotaz vrátí náhodnou podmnožinu 25 větz tabulky STUDENTI, které splňují podmínku uvedenou ve frázi WHERE.

PPřřííkkaazz TTRRAANNSSFFOORRMMPříkaz TRANSFORM vytvoří křížový dotaz. Jeho syntaxe je:

TRANSFORM agregfunkce vybratpříkaz PIVOT kontingenčnípole [IN (hodnota1[, hodnota2[, ...]])]

Příklad:

PARAMETERS [Požadovaný rok] LONG;

UČEBNICE VISUAL BASICU 6.0

82

TRANSFORM Sum([Rozpis objednávek].Množství * ([Rozpis objednávek].JednotkováCena– ([Rozpis objednávek].Sleva / 100) * [Rozpis objednávek].JednotkováCena)) ASProdej

SELECT Firma FROM Objednávky

INNER JOIN ((Dodavatelé INNER JOIN Výrobky ON Dodavatelé.ČísloDodavatele = Vý-robky.ČísloDodavatele)

INNER JOIN [Rozpis objednávek] ON Výrobky.ČísloVýrobku = [Rozpis objednávek].Čí-sloVýrobku)

ON Objednávky.ČísloObjednávky = [Rozpis objednávek].ČísloObjednávky

WHERE DatePart(“yyyy“, DatumObjednávky) = [Požadovaný rok]

GROUP BY Firma

ORDER BY Firma

PIVOT “Qtr “ & DatePart(“q“, DatumObjednávky) In (‘Qtr 1’, ‘Qtr 2’, ‘Qtr 3’,‘Qtr 4’)

V uvedeném příkladu je vytvořen křížový dotaz, který vrátí přehled prodeje výrobků projednotlivé dodavatele podle čtvrtletí v roce, který uživatel určí. Čtvrtletí jsou vracena zlevadoprava jako sloupce a názvy dodavatelských firem jsou vraceny shora dolů jako řádky.

PPřřííkkaazz PPAARRAAMMEETTEERRSSPříkaz PARAMETERS definuje parametr parametrického dotazu. Uživatelem definovanáhodnota po spuštění dotazu se dále používá při jeho běhu.

Příklad:

PARAMETERS [Požadovaný rok] LONG;

Po spuštění dotazu musí uživatel zadat celočíselnou hodnotu typu Long do parametrus názvem Požadovaný rok.

PPřřííkkaazz CCRREEAATTEE TTAABBLLEEPříkaz CREATE TABLE je ekvivalentem vytvářecího dotazu – příkaz vytvoří novou tabulku.

Příklad:

CREATE TABLE Tab (Jméno TEXT, Příjmení TEXT)

Uvedený příkaz vytvoří v aktuální databázi tabulku Tab se dvěma poli Jméno a Příjme−ní, která budou obě datového typu Text.

PPřřííkkaazz AALLTTEERR TTAABBLLEEPříkaz ALTER TABLE umožní upravit návrh tabulky (stejně jako v mávrhovém zobrazenítabulky) poté, co byla vytvořena pomocí příkazu CREATE TABLE.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

83

Příklad:

ALTER TABLE Zaměstnanci ADD COLUMN Plat CURRENCY

Příkaz přidá do tabulky Zaměstnanci pole Plat, které bude datového typu Měna.

Příklad:

ALTER TABLE Zaměstnanci DROP COLUMN Plat

Příklad odstraní z tabulky Zaměstnanci pole Plat.

FFrráázzee CCOONNSSTTRRAAIINNTTFrázi CONSTRAINT je možno použít v příkazech ALTER TABLE a CREATE TABLE pro vy−tvoření nebo odstranění omezení. Existují dva typy fráze CONSTRAINT:

• pro vytvoření omezení pro jedno pole

• pro vytvoření omezení pro více než jedno pole.

Příklad:

CREATE TABLE NováTabulka (Jméno TEXT, Příjmení TEXT, Číslo INTEGER CONSTRAINTOmezení PRIMARY KEY)

Tento příklad vytvoří novou tabulku se dvěma textovými poli a polem typu Integer. Po−le Číslo je primární klíč.

PPřřííkkaazz CCRREEAATTEE IINNDDEEXXPříkaz CREATE INDEX vytvoří nový index v existující tabulce.

Syntaxe příkazu je následující:

CREATE [ UNIQUE ] INDEX index

ON tabulka (pole [ASC|DESC][, pole [ASC|DESC], ...])

[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

Z uvedené syntaxe vyplývá, že lze definovat index jedinečný (UNIQUE), primární index(PRIMARY), případně se zakázáním (DISALLOW NULL) nulových hodnot nebo jejich ig−norováním (IGNORE NULL).

Příklad:

CREATE UNIQUE INDEX KódZák ON Zákazníci (Kód Zákazníka) WITH DISALLOW NULL

Příklad vytvoří jedinečný index KódZák pro pole Kód zákazníka.

UČEBNICE VISUAL BASICU 6.0

84

PPřřííkkaazz DDRROOPPPříkaz DROP odstraní existující tabulku z databáze nebo existující index z definovanétabulky.

Příklad:

DROP INDEX Indexování ON Dopravci

Příklad odstraní index Indexování z tabulky Dopravci.

Příklad:

DROP TABLE Zaměstnanci

Příklad odstraní tabulku Zaměstnanci z aktivní databáze.

PPřřííkkaazz UUPPDDAATTEEPříkaz UPDATE je ekvivalentem aktualizačního dotazu. Pomocí tohoto příkazu lze měnithodnoty v polích tabulky.

Příklad:

UPDATE Zaměstnanci SET Nadřízený = 5 WHERE Nadřízený = 2

Pole Nadřízený tabulky Zaměstnanci je nastaveno na hodnotu 5 u všech zaměstnanců,u kterých mělo toto pole dosud hodnotu 2.

PPřřííkkaazz DDEELLEETTEEPříkaz DELETE je ekvivalentem odstraňovacího dotazu, jenž odstraní záznamy z jednénebo více tabulek.

Příkazem DELETE můžete odstranit pouze celé záznamy. Odstranění jednotli−vých polí viz příkaz DROP.

Příklad:

DELETE * FROM Zaměstnanci WHERE plat > 20000

Příkaz odstraní z tabulky záznamy všech zaměstnanců, jejichž plat je vyšší než 20 000.

Ačkoli výčet příkladů (a dokonce ani příkazů, klauzulí atd.) pro používání jazyka SQLnení úplný, je dostatečně názorný a motivující pro to, abyste byli schopni vytvářet a po−užívat nejen jednoduché ale i složitější dotazy.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

85

SSQQLL ddoottaazz aapplliikkaaccee zz ppřřeeddcchhoozzíí lleekkcceeNyní již víme, jakým způsobem vytvořit SQL dotaz, pomocí něhož odešleme data do da−tabáze. Pokud ne, vše bude jasné z následujícího kódu připojeného k události OnClicktlačítka „Uložit“ formuláře Form1:

Dim strSQL As String

strSQL = “INSERT INTO Pracovnik ORDER BY Prijmeni“

strSQL = strSQL & “(Jmeno,Prijmeni,Titul,Plat,Poznamka) VALUES (“

strSQL = strSQL & “‘“ & txtJmeno.Text & “‘, ‘“

strSQL = strSQL & txtPrijmeni.Text & “‘, ‘“

strSQL = strSQL & txtTitul.Text & “‘, “

strSQL = strSQL & txtPlat.Text & “, ‘“

strSQL = strSQL & txtPoznamka.Text & “‘);“

cn.Execute strSQL, rdExecDirect

Unload Me

Nejprve je nutné sestavit SQL dotaz uvozený klauzulí INSERT. Tento dotaz se uloží doproměnné strSQL.

TIP:

Textové řetězce je v SQL dotazu zapotřebí uzavřít do apostrofů.

Následuje spuštění dotazu metodou Execute objektu rdoConnection. Proměnná strSQL jeprvním argumentem metody, konstanta rdExecDirect jako argument druhý zajišťuje oka−mžité spuštění dotazu.

TIP:

Tato procedura neobsahuje kód, který by předcházel chybám, které se za běhu procedury mohouvyskytnout. Ošetřením tzv. zachytitelných chyb při běhu programu se bude zabývat až jednaz následujících lekcí.

Příkaz Unload Me zapište i k proceduře OnClick tlačítka Storno.

Posledním úkolem naší malé aplikace bude vytvoření a naprogramování formulářeForm2. Tento formulář bude zobrazovat data z databáze a bude pouze pro čtení. Vzhle−dem k tomu, že formulář je ideálním příkladem části aplikace využívající tzv. grid, sezná−míme se s jeho programováním.

Gridem rozumíme ovládací prvek pro zobrazování tabulkových dat. Exisuje velké množ−ství těchto ovládacích prvků, z nichž většina není standardně dodávaná s instalací Visu−al Basicu. My pro naše účely použijeme ten nejjednodušší vestavěný ovládací provektohoto typu – MSFlexGrid.

Dříve, než jej přidáme na formulář a budeme programovat, musíme ho přidat do aktuál−ních komponent projektu. Z nabídky Visual Basicu zadejte příkaz Project/Components

UČEBNICE VISUAL BASICU 6.0

86

a zaškrtněte na záložce Controls řádek Microsoft FlexGridControl. Po potvrzení se ikonaMSFlexGridu přidá do ToolBoxu.

TIP:

Pokud je záložka Controls prázdná, zkontrolujte, že není zatržen CheckBox s titulkem SelectedItems Only.

Umístěte MSFlexGrid na plochu formuláře Form2 a změňte jeho vlastnost Name na„flxResult“. Bude to jediný ovládací prvek na formuláři – viz obr. 36.

obr. 36 Formulář s vloženým MSFlexGridem

Nyní klepněte pravým tlačítkem myši na plochu gridu a z pohotovostní nabídky vyber−te příkaz Properties. V záložce General následně zobazeného dialogového okna nastav−te parametry (viz. obr. 37):

• Rows na hodnotu 2 (počet řádek gridu)

• Cols na hodnotu 5 (počet sloupců gridu)

• Fixed Rows na hodnotu 1 (počet řad záhlaví gridu)

• Fixed Cols na hodnotu 0 (počet sloupců záhlaví gridu).

obr. 37 Nastavení vlastností ovládacího prvku MSFlexGrid

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

87

Do formuláře přidejte tento kód:

Private Sub Form_Load()

Dim strSQL As String

Dim rso As rdoResultset

Dim PocetRad As Integer

flxResult.TextMatrix(0, 0) = “Titul“

flxResult.TextMatrix(0, 1) = “Jméno“

flxResult.TextMatrix(0, 2) = “Příjmení“

flxResult.TextMatrix(0, 3) = “Plat (Kč)“

flxResult.TextMatrix(0, 4) = “Poznámka“

flxResult.ColWidth(0) = 1000

flxResult.ColWidth(1) = 1500

flxResult.ColWidth(2) = 1500

flxResult.ColWidth(3) = 1000

flxResult.ColWidth(4) = 3300

strSQL = “SELECT * FROM Pracovnik ORDER BY Prijmeni“

Set rso = cn.OpenResultset(strSQL, rdOpenStatic)

flxResult.Redraw = False

PocetRad = 0

Do While Not rso.EOF

flxResult.AddItem ““

flxResult.TextMatrix(flxResult.Rows – 1, 0) = rso!titul

flxResult.TextMatrix(flxResult.Rows – 1, 1) = rso!jmeno

flxResult.TextMatrix(flxResult.Rows – 1, 2) = rso!prijmeni

flxResult.TextMatrix(flxResult.Rows – 1, 3) = rso!plat

flxResult.TextMatrix(flxResult.Rows – 1, 4) = rso!poznamka

rso.MoveNext

PocetRad = PocetRad + 1

Loop

If PocetRad > 0 Then flxResult.RemoveItem 1

flxResult.Redraw = True

flxResult.Refresh

Set rso = Nothing

End Sub

První série řádků této procedury formátuje MSFlexGrid. VlastnostTextMatrix určuje titu−lek v jednotlivých buňkách záhlaví. Např. flxResult.TextMatrix(0, 1) = “Jméno“ přiřa−zuje buňky nultého řádku a prvního sloupce text „Jméno“. Pomocí vlastnosti ColWidths pořadovým číslemn sloupce jako argumentem nastavuje šířku sloupce. Řádek

Set rso = cn.OpenResultset(strSQL, rdOpenStatic)

UČEBNICE VISUAL BASICU 6.0

88

spouští SQL dotaz uložený v proměnné strSQL. Vzhledem k tomu, že tentokrát je zapo−třebí data z databáze přijmout a nikoli poslat, je nutné spustit dotaz jiným způsobem.

Metoda Open Resultset vrátí do proměnné rso (která je datového typu rdoResultset) sa−du záznamů z databáze. Jeden řádek z databáze znamená jeden záznam. KonstantardOpenStatic říká, že záznamy je možné pomocí proměnné rso pouze číst a nikoli upra−vovat.

Smyčka

Do While Not rso.EOF

bude postupně procházet celý Resultset připojený k proměnné rso, dokud se nedostanena konec.

TIP:

Vlastnost EOF (End of File) nabývá hodnoty True, pokud je aktuální pozice v Resultsetu nastave-na za poslední záznam.

Ve smyčce se nejprve vloží prázdný řádek do MSFlexGridu a naplní se texty obsažený−mi v Resultsetu. Metoda MoveNext nastaví aktuální pozici v Resultsetu na následujícízáznam.

Po ukončení smyčky je zapotřebí odstranit z gridu jeden prázdný řádek (ovšem jen v pří−padě, že se z databáze opravdu vrátila nějaká data, tj. proměnná PocetRad > 0). Na zá−věr se musí uvolnit paměť, kterou zabíral Resultset, příkazem Set rso = Nothing.

TIP:

Aby se zabránilo problikávání změn v gridu při jeho naplňování, je před provedením změn zakázá-no jejich zobrazování (flxResult.Redraw = False) a po jeho naplnění se změny teprve zobrazí

(flxResult.Redraw = True

flxResult.Refresh)

obr. 37a Formulář Form2 se zobrazenými daty z databáze o dvou pracovnících

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

89

DDSSNN--lleessssPojem DSN−less znamená, že připojení do databáze je možné založit i bez definice DSN,které jsme v předcházejícím příkladu použili (viz klauzule dsName:=“NovaDatabaze“ v pro−ceduře Main). Výhodou použití DSN je trochu vyšší rychlost spojení. Zato je však nutnéna každém počítači, který bude technologií DSN přistupovat do databáze, korektně totoDSN definovat.

Naproti tomu DSN−less technika umožní distribuci programu bez toho, že by bylo nutnéručně na každém počítači definovat Data Source Name. Úprava našeho příkladu na ten−to typ spojení bude velice jednoduchý:

Sub main()

Dim stCon As String

stCon = “DRIVER={Microsoft Access Driver (*.mdb)};dbq= c:\databaze\db1.mdb“

Set cn = rdoEnvironments(0).OpenConnection(““, rdDriverNoPrompt, False,stCon)

FormMain.Show

End Sub

Jak vidíte, jde vlastně o to, že údaje, které se jinak zadávají při definici DSN (tj. názevovladače a cesta k databázi), je nutné nyní zapsat přímo do programového kódu. Vše−chen ostatní programový kód zůstává beze změn v platnosti.

OOvvllááddaaccíí pprrvveekk DDaattaaPro ty z vás, kterým se přistupování do databáze pomocí ODBC nebo programováníDAO zdá příliš složité, existuje jedna pohodlná alternativa. Existuje ovládací prvek Da−ta, který dokáže přistoupit k databázi zcela jednoduše a bez jakéhokoli psaní programo−vého kódu. Na obr. 38 vidíte hotový formulář, který je navržen pro editování dat ze stan−dardní databáze Bibio.mdb, která je součástí instalace Accessu. Tento ovládací prvek jeumístěn na formuláři a vypadá podobně jako navigační tlačítka v tabulce záznamů sa−motného Accessu. Pod tímto prvkem jsou již pouze klasické TextBoxy určené pro zob−razení dat. Přenos a veškerá manipulace s daty se děje prostřednictvím databázovéhostroje Microsoft Jet a je dostupná bez jakéhokoli programování pouhým nastavením vlast−ností ovládacích prvků, které vidíte na formuláři.

UČEBNICE VISUAL BASICU 6.0

90

obr. 38 Formulář s ovládacím prvkem Data

Ovládací prvek Data má několik důležitých vlastností, které je třeba správně nastavit jižv době návrhu formuláře v okně vlastností tohoto ovládacího prvku:

• Connect – tato vlastnost musí být nastavena na vestavěný databázový ovladač.Hodnotu si tedy nemůžete napsat libovolnou, ale musíte ji vybrat z ComboBoxu,který je k vlastnosti přidružen. V našem případě je zvolena hodnota „Access“,která indikuje použití ovladače pro Microsoft Accees.

• DatabaseName – zde musí být uveden název databázového souboru MDB včet−ně cesty k tomuto souboru.

• DefaultType – zde zvolíte, jestli má být připojení k databázi realizováno pomocítechnologie Jet nebo ODBC. Zvolte Jet.

• ReadOnly – tato vlastnost typu Boolean říká, jestli data z databáze editovaná bu−dou jen pro čtení (hodnota True) nebo zda je bude možné měnit (False).

TIP:

Vlastnost ReadOnly patří ovládacímu prvku Data, a proto se vztahuje pouze na připojení k data-bázi. Samotná data budou zobrazována v TextBoxech, kde změny mohou být povoleny (viz vlast-nost Enabled). Pokud však bude vlastnost ReadOnly nastavena na hodnotu True, nebudou se žád-né změny provedené v TextBoxech ukládat do databáze.

• RecordsetType – typ recordsetu, který bude objekt Data vracet z databáze. Ve vět−šině případů vystačíte s hodnotou 0, tedy typem „Table“.

• RecordSource – Zdroj záznamů recordsetu. V našem případě hodnotou této vlast−nosti musí být platný název tabulky nebo dotazu databáze MDB.

TextBoxy obsažené na formuláři musejí mít správně nastaveny další dvě vlastnosti, sekterými jsme se zatím nesetkali:

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

91

• DataSource – tato vlastnost musí být nastavena na hodnotu vlastnosti Nameovládacího prvku Data. (Název tohoto prvku, který zajišťuje spojení s databázi jetedy „zdrojem“ dat).

• DataField – Název sloupce z tabulky databáze, který se má v příslušném TextBo−xu zobrazovat.

Otázky a úkoly:

1) Doprogramujte aplikaci pro správu zaměstnanců tak, abyste dokázali z aplikačníhoformuláře záznamy také aktualizovat.

2) Naprogramujte aplikaci pro správu zaměstnanců tak, aby bylo možné řadit zobraze−ná databázová data podle jména nebo příjmení, a to vzestupně i sestupně.

UČEBNICE VISUAL BASICU 6.0

92

Lekce 10

TTvvoorrbbaa uužžiivvaatteellsskkyy ppřřííjjeemmnnýýcchh aapplliikkaaccííCíle lekce:

Naučit se vytvářet uživatelsky příjemnéaplikace programováním Menu, ovláda−cích prvků Toolbar, StatusBar apod.

To, aby aplikace byla uživatelsky příjemná, je dnes jedním ze základních předpokladůtoho, aby byla také úspěšná. O úspěchu nebo neúspěchu programové aplikace často roz−hoduje její obliba nebo neobliba u uživatelů. A obliba zase závisí na tom, jak jednoduchéa intuitivní bude ovládání – žádný uživatel se nechce dlouho učit ovládat program a vy−žaduje funkce, na něž je zvyklý z jiných programů.

Aby s uživatelským rozhraním vašich programů byli uživatelé spokojeni, naučíme se ny−ní používat některé ovládací prvky určené k ovládání aplikace.

MMeennuuZákladním ovládacím prvkem, který by neměl chybět na žádném úvodním formuláři vět−ší aplikace je Menu.

TIP:

Menu (používá se také čeký výraz Nabídka), je ve všech známých programech Windows. Např.: me-nu Microsoft Word začíná položkami Soubor, Úpravy atd. Stejné menu lze přidat i do formulářů Vi-sual Basicu.

Založte tedy nový formulář a klepněte pravým tlačítkem myši na plochu tohoto formu−láře. Z pohotovostního menu zvolte příkaz Menu Editor (viz obr. 39).

obr. 39 Jak zobrazit dialog pro tvorbu Menu

Samotný dialog pro tvorbu menu vidíte na obr. 40. Horní část dialogu je určena pro zob−razení a určování vlastností té položky menu, která je prosvícena v dolní části.

93

obr. 40 Dialog pro tvorbu Menu

Dialog pro tvorbu menu s vyplněnými položkami je na obr. 41.

obr. 41 Vyplněný dialog pro tvorbu Menu

Na obr. 41 je dobře vidět, které položky menu jsou v hierarchii na prvním, druhém a dal−ších místech. Na prvním místě jsou Aplikace, Nástroje, Nápověda. Položka Zabezpečeníje již vnořena pod položku Nástroje atd.

TIP:

Pokud máte zvolenou (prosvícenou) položku menu, můžete její pořadí mezi položkami i úroveň za-noření ovládat černými šipkami umístěnými v dialogu. Stejně tak pokud zadáváte položku novou,upravte šipkami vlevo a vpravo úroveň jejího zanoření.

UČEBNICE VISUAL BASICU 6.0

94

Na obrázku 42 vidíte menu s rozbalenou položkou Nástroje.

obr. 42 Hotové menu s rozbalenou položkou Nástroje

Zatím jsem však pouze přidali menu do formuláře. Stále je ještě nutné naprogramovat je−ho chování. To se již dělá standardním způsobem za pomoci událostních procedur. Po−kud se např. některá z vnořených položek jmenuje mnuDelete, naprogramujte její cho−vání v proceduře Private Sub mnuDelete_Click(), stejně jako se programuje chování tře−ba příkazových tlačítek.

KKoonntteexxttoovvéé mmeennuuKontextové, pohotovostní (anglicky PopUp) menu je dalším výhodným prvkem pro uži−vatelsky příjemné ovládání aplikací. Pokud uživatel klikne pravým tlačítkem myši na ně−který ovládací prvek na formuláři, může si z kontextového menu vybrat, jakou akci chces daným prvkem uskutečnit.

Pro naše demonstrační účely vytvoříme kontextové menu na prázdném formuláři. Našemenu bude mít pouze dvě položky:

• zavřít formulář

• změnit nadpis formuláře

Vytvořte tedy v projektu prázdný formulář a výše zmíněným způsobem zobrazte dialogpro zadávání položek menu.

Do menu vložte následující položky (viz obr. 43):

• mnuPop – položka menu na nejvyšší úrovni. U této položky zrušte zaškrtnutíu vlastnosti Visible, protože nechceme, aby se tato položka objevila v hlavnímmenu hned po zobrazení formuláře

• mnuClose – položka menu pro zavření formuláře

• mnuCaption – položka menu pro změnu nadpisu formuláře.

Poslední dvě položky již nadefinujte jako viditelné (pole vlastnosti Visible nechte za−škrtnuté).

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

95

obr. 43 Definice kontextového menu

K ovládání menu naprogramujeme událostní proceduru Form_MouseDown. Kód tétoprocedury se provede vždy, když uživatel stiskne jakékoli tlačítko myši ve chvíli, kdyukazatel myši je nad formulářem mimo další ovládací prvky.

Procedura Form_MouseDown má několik vstupních parametrů:

• Button – parametr určuje, které tlačítko myši bylo stisknuto. Při provádění proce−dury má tento parametr jednu ze tří hodnot:

• vbLeftButton (hodnota 1) Bylo stisknuto levé tlačítko

• vbRightButton (hodnota 2) Bylo stisknuto pravé tlačítko

• vbMiddleButton (hodnota 4) Bylo stisknuto prostřední tlačítko

• Shift – tento parametr určuje, zda spolu s tlačítkem myši byla stisknuta také ně−která z přepínacích kláves. Při provádění procedury má tento parametr jednuz hodnot:

• vbShiftMask (hodnota 1) Byla stisknuta klávesa SHIFT

• vbCtrlMask (hodnota 2) Byla stisknuta klávesa CTRL

• vbAltMask (hodnota 4) Byla stisknuta klávesa ALT

• hodnota 0 Nebyla stisknuta žádná z uvedených kláves.

• X, Y – udávají pozici na formuláři, kde se v okamžiku stlačení tlačítka právě na−cházel kurzor.

TIP:

Hodnota parametru Shift může nabývat i jiných hodnot než pouze uvedených čtyř. V případě, žeje stisknuto více kláves najednou, jejich hodnoty se sčítají. Tj. pokud jsou stisknuty najednou klá-vesy SHIFT a CTRL, bude parametr Shift mít hodnotu 3.

UČEBNICE VISUAL BASICU 6.0

96

Veškerý programový kód našeho formuláře bude vypadat takto:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single,_Y As Single)

If Button = vbRightButton Then

Me.PopupMenu mnuPop

End If

End Sub

Private Sub mnuCaption_Click()

Me.Caption = InputBox(“Zadej nový titulek formuláře:“, “Nový titulek“)

End Sub

Private Sub mnuClose_Click()

Unload Me

End Sub

V proceduře Form_MouseDown se vyvolá metoda PopupMenu, jejímž parametrem je ná−zev hlavní položky kontextového menu.

Pokud v kontextovém menu uživatel klepne na položku „Změnit nadpis formuláře“, za−čne se vykonávat procedura mnuCaption_Click. Tato procedura používá vestavěnoufunkci InputBox, která zobrazí jednoduchý dialog pro zadání vstupu uživatele (vizobr. 44).

obr. 44 InputBox

SSttaattuussBBaarrStatusBar je ovládací prvek, který obvykle najdete u spodního okraje většiny aplikačníchoken ve Windows. Tento řádek slouží k zobrazování aktuálních informací o stavu apli−kace, chybových hlášeních, času, datu atp.

TIP:

Pro to, abyste mohli vložit ovládací prvek StatusBar na plochu formuláře, musíte nejprve přidatdo projektu komponentu Microsoft Windows Common Controls. (Příkaz nabídky Project/Compo-nents/Controls.)

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

97

obr. 45 Návrh formuláře se zabudovaným ovládacím prvkem StatusBar

StatusBar má několik důležitých vlastností. Jejich hodnoty lze nastavit již při návrhu for−mulářů zadáním v dialogovém okně Properties, které vidíte na obr. 46.

obr. 46 Vlastnosti ovládacího prvku StatusBar

První vlastností je Style. Tato vlastnost může nabývat buď hodnoty 0 (konstanta sbrNor−mal) nebo 1 (sbrSimple).

Hodnota 0 je implicitní a znamená, že prvek StatusBar může být rozdělen na několik ne−závislých panelů, z nichž každý může zobrazovat jiné informace. Protože tento způsobdělení ovládacího prvku StatusBar je nejčastější, začneme nejdříve s ním. Na obr. 47 jezobrazena záložka Panels okna vlastností prvku StatusBar, v níž se definují jednotlivé pa−nely.

UČEBNICE VISUAL BASICU 6.0

98

obr. 47 Definice panelu ovládacího prvku StatusBar

U každého panelu lze nastavit několik vlastností. Obraťme pozornost na ty nejdůležitější:

• Index – každému panelu je přiřazen index. Slouží k rozlišení jednotlivých pane−lů.

• Text – vlastnost obsahující textový řetězec, který bude v panelu zobrazen v pří−padě, že vlastnost Style je nastavena na hodnotu sbrText.

• Style – určuje druh informace, kterou bude daný panel zobrazovat. Kromě výšezmíněné implicitní hodnoty sbrText můžete zvolit např. sbrTime – v tom případěbude daný panel zobrazovat aktuální čas počítače, na němž bude aplikace spuš−těna.

• Minimum Width – Minimální šířka panelu.

Uvedeným vlastnostem je možné jejich hodnoty přiřazovat také programovým kódem.Např. pokud máte na formuláři StatusBar s názvem stb1, můžete jej ovládat třeba takto:

Private Sub Form_Load()

Dim i As Integer

Dim pan As panel

Me.sbr1.Style = sbrNormal

For i = 2 To Me.sbr1.Panels.Count

Me.sbr1.Panels.Remove 2

Next i

Me.sbr1.Panels.Add , , , sbrDate

Me.sbr1.Panels.Add , , , sbrTime

For Each pan In Me.sbr1.Panels

pan.AutoSize = sbrSpring

Next

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

99

Me.sbr1.Panels(1).MinWidth = 3000

Me.sbr1.Panels(2).MinWidth = 1400

Me.sbr1.Panels(3).MinWidth = 1400

End Sub

V prvním kroku je nejprve nastaven style ovládacího prvku sbr1 jako celku na hodnotusbrNormal (bude tedy možné definovat panely). Poté jsou z kolekce Panels odebrányvšechny panely, které tam mohly být a je zachován panel jediný.

TIP:

Alespoň jeden panel musí prvek typu StatusBar vždy obsahovat. Při pokusu o odstranění všechpanelů nastane běhová chyba.

Dále jsou do kolekce Panels přidány panely, jejichž vlastnost Style je nastavena na hod−noty sbrDate, resp. sbrTime. Všem třem panelům je potom vlastnost AutoSize nastavenana hodnotu sbrSpring, tj.tak že velikost panelů se bude dynamicky měnit podle velikos−ti formuláře. Na závěr je nastavena minimální šířka jednotlivých panelů.

Pokud uvedený příklad spustíte, bude formulář vypadat podobně jako na obr. 48.

obr. 48 Formulář s nadefinovaným prvkem StatusBar

Vraťme se nyní k vlastnosti Style prvku StatusBar jako celku. Pokud tuto vlastnost nasta−víte na hodnotu sbrSimple, nebude možné pracovat s panely. Panel bude v tomto přípa−dě jediný – svou šířkou stejný jako celý prvek – a text v panelu zobrazený se bude ovlá−dat pomocí vlastosti SimpleText.

TIP:

Nezaměňujte vlastnost Style panelu (např. sbr1.Panels(1).Style) a ovládacího prvku jako celku (na-př. sbr1.Style). První určuje, jaký druh informací bude panel zobrazovat. Druhá, jestli prvek budezobrazovat panely nebo bude v režimu Simple.

UČEBNICE VISUAL BASICU 6.0

100

TToooollBBaarrToolBar (panel nástrojů) má podobnou funkci jako horizontální menu (nabídka). Častopoužívané funkce menu (nebo i jiné, které v menu obsažené nejsou) je vhodné umístitna panel nástrojů. Microsoft Word používá několik panelů nástrojů. Ve standardním jsouikony např.: pro založení nového, otevření existujícího nebo uložení otevřeného doku−mentu atd. Přístup uživatele k těmto funkcím se velmi urychlí.

TIP:

K tomu, abyste mohli do formuláře přidat ovládací prvek ToolBar je nutné, stejně jako u prvku Sta-tusBar, nejprve zaregistrovat komponentu Microsoft Windows Common Controls. (Příkaz nabídkyProject/Components/Controls.)

Podobným způsobem, jakým jsme přidávali panely do prvku StatusBar, lze přidávat ta−ké tlačítka do kolekce Buttons ovládacího prvku ToolBar. Pro přidávání tlačítek sloužízáložka Buttons na obr. 49.

Obr. 49 Přidávání tlačítek do panelu nástrojů

Opět si popišme důležité vlastnosti tlačítek:

• Index – opět identifikace tlačítka, která je mu přidělena

• Caption – k tlačítku lze přiřadit obrázek nebo textový popis. Pokud chcete mítna tlačítku text, vepište jej do této vlastnosti

• Key – klíč, který můžete definovat, ale nemusíte. Jedná se o doplňkovou identifi−kaci tlačítka.

• Style – zde se určuje chování a vzhled tlačítka. K dispozici je několik hodnot té−to vlastnosti:

• tbrDefault – jedná se o standardní tlačítko se stejným chováním, jaké má na−př. CommandButton

• tbrCheck – tlačítko se může nacházet ve dvou stavech – stisknutém (vlastnostValue má v tom případě hodnotu tbrPressed) a nestisknutém (vlastnost Value

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

101

má v tom případě hodnotu tbrUnPressed). Vhodné pro volbu jedné ze dvoumožností.

• tbrButtonGroup – tlačítko je zařazeno do skupiny. Tlačítko zůstává po klep−nutí myší stisknuto, dokud uživatel neklepne na jiné tlačítko skupiny. Ze sku−piny (tj. z tlačítek s hodnotou tbrButtonGroup vlastnosti Style) může být stisk−nuto nejvýše jedno. Vhodné pro volbu jedné z mnoha možností

• tbrSeparator – tlačítko slouží jako oddělovač tlačítek nebo jejich skupin o šíř−ce 8 pixelů. Nemá žádnou další funkci.

• tbrPlaceholder – stejná funkce jako tbrSeparator s tím, že je nastavitelná šířka.

V případě, že chcete tlačítkům přiřadit obrázkové ikony, musíte mít tyto ikony uloženyv ovládacím prvku ImageList. ImageList je ovládací prvek, který také patří do MicrosoftWindows Common Controls. Jeho okno vlastností vidíte na obr. 50.

obr. 50 ListImage obsahující obrázky

TIP:

Obrázky, které hodláte umístit do ImageListu musíte mít nejprve uloženy na disku, odkud se vklá-dají do ImageListu. Po vložení do ImageListu se pracuje s kopií obrázku uloženou v aplikaci (tj.bezohledu na to, zda je nebo není obrázek dostupný na disku).

Obrázek se vkládá tlačítkem Insert Picture (viz obr. 50) a k jeho odstranění slouží Remo−ve Picture. Každý obrázek (uložený v kolekci Images ovládacího prvku) má svůj Indexa Key, což jsou nejdůležitější vlastnosti pro jeho ovládání.

UČEBNICE VISUAL BASICU 6.0

102

TIP:

Když chcete přiřadit obrázky tlačítkům ToolBaru, musíte nejprve umístit na formulář ovládací pr-vek ImageList, naplnit jej obrázky, a potom přiřadit odkaz na ovládací prvek ImageList do vlast-nosti s názvem ImageList ToolBaru. Viz následující příklad:

Private Sub Form_Load()

Set Me.tlb1.ImageList = Me.ImageList1

AddImagesToToolbar

End Sub

Private Sub AddImagesToToolbar()

Dim btn As Button

For Each btn In Me.tlb1.Buttons

If btn.Key <> ““ Then

btn.Image = btn.Key

End If

Next

End Sub

Uvedený kód předpokládá, že jste nejprve založili ToolBar s názvem tlb1 a umístili naněj (viz obr. 49) libovolné množství tlačítek. U těch tlačitek, kterým má být přiřazena ob−rázková ikona jste definovali vlastnost Key. Všechna zbylá tlačítka mají jako hodnotuvlastnosti Key prázdný řetězec.

Potom jste umístili na plochu formuláře ovládací prvek ImageList s názvem ImageList1.ImageList jste naplnili obrázky (viz obr. 50) s tím, že ikony, které mají být zobrazeny natlačítcích ToolBaru mají hodnotu Key stejnou jako je hodnota této vlastnosti u příslušné−ho tlačítka.

Tedy pokud chcete, aby tlačítko neslo obrázek nového dokumentu, musí mít toto tlačít−ko i obrázek v ImageListu stejnou hodnotu vlastnosti Key.

Pokud jsou všechny tyto podmínky splněny, můžete spustit kód. Výsledkem bude for−mulář s naplněným ToolBarem.

obr. 51 Formulář obsahující ovládací prvky StatusBar a ToolBar.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

103

TIP:

V jediném formuláři můžete mít i více než pouze jeden ToolBar.

A jakým způsobem dále naprogramovat chování aplikace při klepnutí na některé tlačít−ko ToolBaru? Slouží k tomu událostní procedura tlb1_ButtonClick. Kód této proceduryby mohl vypadat nějak takto:

Public Sub tlb1_ButtonClick(ByVal Button As ComctlLib.Button)

Select Case Button.Key

Case “New“

‘/// ošetření nové položky

Case “Print“

‘/// ošetření tisku

Case “Preview“

‘/// ošetření náhledu

End Select

End Sub

V proceduře je třeba zajistit, aby bylo rozeznáno tlačítko, na které uživatel klepnul. V na−šem případě je použita jednoznačná identifikace podle hodnoty vlastnosti Key tlačítka.Objekt Button odkazující na tlačítko, které bylo stisknuto, je vstupním parametrem tétoudálostní procedury.

DDaallššíí ttiippyy pprroo ttvvoorrbbuu uusseerr ffrriieennddllyy aapplliikkaaccíí

TIP:

Používejte vlastnost ToolTipText. Většina viditelných ovládacích prvků na formuláři má vlastnostToolTipText, které lze přiřadit libovolnou hodnotou typu String. Tento text se potom objeví jakokontextová nápověda vždy ve chvíli, kdy uživatel umístí kurzor myši nad tento ovládací prvek. To-olTipText může obsahovat doplňující informace, které nelze zanést kvůli velikosti prvku např. dojeho vlastnosti Caption.

TIP:

Používejte korektně Z-Order. Ačkoli uživatelé budou vždy při ovládání aplikace používat myš, mě-la by být aplikace plně ovladatelná i bez myši (stejně jako např. systém Windows). K přenášení fo-kusu (zaměření) mezi jednotlivými prvky v tom případě slouží klávesa TAB. To, v jakém pořadí jsoupři opakovaném stisku této klávesy ovládací prvky formuláře zaměřovány, se nazývá Z-order.

Každý viditelný prvek formuláře má vlastnosti TabStop a TabIndex. Hodnota vlastnosti TabStop jeBoolean, přičemž True znamená, že objekt je zařazen mezi objekty, na které se přenáší fokus přiopakovaném stisku klávesy TAB. Hodnota False jej z těchto prvků vylučuje.

Vlastnost TabIndex je číselná a znamená pořadové číslo v kolekci Z-Order, tj. jako kolikátý získá pr-vek fokus. Po natažení a aktivaci formuláře je vždy zaměřen prvek s hodnotou 0 vlastnostiTabIndex. (Pokud takový prvek neexistuje, je zaměřen prvek s nejnižší hodnotou).

UČEBNICE VISUAL BASICU 6.0

104

TIP:

Pokud chcete, aby hned po zobrazení formuláře byl zaměřen jiný ovládací prvek než ten s nejniž-ší hodnotou TabIndex, můžete to zajistit naprogramováním událostní procedury Form_Activate,která bude obsahovat kód Nazevprvku.SetFocus. Metodu SetFocus mají všechny viditelné ovláda-cí prvky.

Není možné volat metodu SetFocus v proceduře Form_Load, protože v té chvíli nejsou ještě ovlá-dací prvky nataženy v paměti počítače.

TIP:

Používejte klávesové zkratky. Položky menu mohou být dostupné klávesovými zkratkami(Shortcut), které lze pro každou položku menu definovat v okně vlastností.

Otázky a úkoly:

1) Jaké další uživatelsky příjemné funkce znáte z komerčních aplikací?

2) K čemu by se dal ještě použít ovládací prvek ImageList?

3) Zkuste do ToolBaru přidat i jiné ovládací prvky než pouze tlačítka a naprogramujtejejich funkčnost.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

105

Lekce 11

TTiisskk aa oovvllááddáánníí ttiisskkáárreennCíle lekce:

Zvládnout jednoduché formátování texto−vých stran pro tiskárnu a zajistit jejich tiskna zvolené tiskárně.

Tisk z aplikací Visual Basicu je jednou z častých a ne zrovna jednoduchých programá−torských úloh. Tisky složitých grafických výstupů v této lekci pomineme a zaměříme sena jednoduššími prostředky řešitelné tisky textových stran.

Vytvořme tedy aplikaci, která sama vyhledá tiskárny nainstalované v systému Windows,nabídne jejich seznam a zajistí tisk textového dokumentu na vybrané tiskárně. Založte te−dy nový formulář a vytvořte na něm ComboBox s názvem comTiskárna a její vlastnostStyle nastavte na hodnotu 2. Dále vytvořte TextBoxy s názvem txtNadpis a txtText. Vlast−nost MultiLine u prvku txtText nastavte na hodnotu True. Posledním ovládacím prvkembude CommandButton s názvem cmdTisk.

obr. 52 Formulář pro tisk

V první proceduře se pouze naplní ComboBox comTiskarna názvy všech tiskáren, kteréjsou nainstalovány v systému Windows (viz obr. 53).

obr. 53 Nainstalované tiskárny ve Windows

107

K tomu se používá kolekce Printers, která sama zjistí údaje o všech tiskárnách, kteréjsou právě nainstalovány.

Private Sub Form_Load()

Dim i As Integer

If Printers.Count > 0 Then

For i = 0 To Printers.Count – 1

comTiskarna.AddItem Printers(i).DeviceName

comTiskarna.ItemData(comTiskarna.NewIndex) = i

Next i

comTiskarna.ListIndex = 0

Else

MsgBox Prompt:=“Aplikace nenašla žádnou připojenou tiskárnu. “ & _

“ Nainstalujte alespoň jednu tiskárnu a spuskte program znovu.“, _

Buttons:=vbCritical + vbOKOnly, Title:=“Chyba“

Unload Me

End If

End Sub

Pokud není nainstalována žádná tiskárna, aplikace vypíše chybové hlášení a sama seukončí.

TIP:

Pokud si chcete vyzkoušet běh programu včetně tisku a nemáte žádnou tiskárnu, kterou bystemohli k počítači připojit, nainstalujte ji nikoli na paralelní port LPT1, ale na FILE (tisk do souboru)– viz obr. 54. Při tisku budete vyzváni k zadání názvu souboru, kam se tisk uloží.

obr. 54 Instalace tiskárny na FILE

Potom již zbývá pouze zajistit vytištění údajů v proceduře cmdTisk_Click. Do této pro−cedury vložte následující text.

UČEBNICE VISUAL BASICU 6.0

108

Private Sub cmdTisk_Click()

On Error Resume Next

Set Printer = Printers(comTiskarna.ListIndex)

Printer.Copies = 1

Printer.PaperSize = vbPRPSA4

Printer.Orientation = vbPRORPortrait

Printer.CurrentX = 0

Printer.CurrentY = 720

Printer.FontSize = 14

Printer.Print txtNazev.Text

Printer.CurrentX = 0

Printer.CurrentY = 1125

Printer.FontSize = 10

Printer.Print txtText.Text

Printer.EndDoc

End Sub

Nejprve jako aktivní tiskárnu nastavte tu, která je zvolena v ComboBoxu comTiskarna.dále se nastavují vlastnosti tisku:

• Printer.PaperSize = vbPRPSA4velikost papíru A4

• Printer.Orientation = vbPRORPortraitOrientace papíru na výšku

• Printer.CurrentX = 0Tisková pozice prvního písmene v horizontálním směru

• Printer.CurrentY = 720Tisková pozice prvního písmene ve vertikálním směru

• Printer.FontSize = 14 Velikost písma

Příkazem Printer.Print se plní buffer (vyrovnávací paměť) naformátovaným textem ur−čeným pro tisk. Teprve příkaz Printer.EndDoc odešle celý buffer na tiskárnu.

TIP:

Všimněte si, že při tisku textu příkazem Printer.Print txtText.Text se vytiskne na jediný řádek pa-píru celý text až do jeho odřádkování. Proto je nutné dlouhé texty explicitně odřádkovat vlože-ním znaku Chr(13) za každý např. 60. znak v závislosti na velikosti fontu.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

109

TIP:

Můžete také explicitně poslat na tiskárnu příkaz, aby následující řádek byl vytištěn již na novéstránce. Tímto příkazem je Printer.NewPage.

TIP:

Ze zkušenosti víte, že tiskárnu lze nastavit zadáním mnohem většího počtu vlastností. Počet těch-to vlastností se však liší v závislosti na použitém ovladači tiskárny. Ovladače starších tiskáren ne-podporují některé vlastnosti, a proto při pokusu o jejich nastavení vznikne běhová chyba progra-mu. Je tedy důležité mít na začátku rutiny příkaz On Error Resume Next, který tento nedostatekodchytí. O ošetřování chyb se více dozvíte v jedné z následujících lekcí.

TIP:

Pro vytištění grafiky můžete moužít metody Circle, Line a PaintPicture.

Jak vidíte, tisk tímto způsobem skutečně není příliš příjemný.

CCoommmmoonnDDiiaallooggNastavení tiskárny vám zpříjemní ovládací prvek CommonDialog. Abyste jej mohli umís−tit na formulář, je nutné zaregistrovat komponentu Microsoft Common Dialog Control.Pokud tuto komponentu umístíte na formulář, můžete výhodně používat množství obec−ných dialogových oken, které jsou velice podobné těm v systému Windows.

Ovládací prvek CommonDialog má několik metod vyvolávajících různá dialogová okna:

• ShowOpen (viz obr. 55)

• ShowSave (viz obr. 56)

• ShowColor (viz obr. 57)

• ShowFont (viz obr. 58)

• ShowPrinter (viz obr. 59)

• ShowHelp (viz obr. 60)

obr. 55 ShowOpen

UČEBNICE VISUAL BASICU 6.0

110

obr. 56 ShowSave

obr. 57 ShowColor

obr. 58 ShowFont

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

111

obr. 59 ShowPrinter

obr. 60 ShowHelp

Hodnoty nastavené v jednotlivých dialozích jsou zaneseny do vlastností ovládacíhoprvku CommonDialog. Zkuste si například:

Me.CommonDialog1.ShowPrinter

Printer.Copies = CommonDialog1.Copies

Otázky a úkoly:

1) Vyzkoušejte si použití metod pro tisk grafických objektů Circle, Line a PaintPicture.Jaké další problémy s formátováním použití těchto metod přináší?

2) Jaké další (v lekci neuvedené) metody a vlastnosti objektu Printer můžete využít veVisual Basicu?

3) Použijte CommonDialog pro otevření textového souboru a načtení dat.

UČEBNICE VISUAL BASICU 6.0

112

Lekce 12

CChhyybbyy aa jjeejjiicchh ooššeettřřeennííCíle lekce:

naučit se zpracovávat běhové chyby pro−gramu.

Dobrá aplikace musí fungovat vždy a za všech okolností. Proto musí programátor při svépráci předvídat, k jakým problémům může při jejím používání dojít. Všechny potenciál−ní chyby jistě nelze do detailů předvídat, ale je možné ošetřit tyto nečekané události ale−spoň tak, že v případě jejich výskytu se aplikace nezhroutí, ale zakáže příslušnou akcia vypíše o tom zprávu na monitoru počítače.

Slovo Error (které v překladu znamená „chyba“) představuje v jazyce Visual Basicfunkci, objekt, příkaz nebo událost. Každý z těchto významů slova Error se od ostatníchliší, a proto má i odlišné použití. Mají však jedno společné – slovo Error je vždy spoje−no s chybou běhu aplikace.

Zaměřme se nejprve na chybové události, jejichž ošetření je možné připojením událost−ní procedury připojené k události Error formuláře nebo sestavy. Událost Error se vzta−huje spíše na chyby komunikace aplikace s ostatními součástmi operačního systémuWindows přes svá rozhraní nebo na komunikaci se vzdáleným zdrojem dat. Nevztahujese tedy na chyby samotného kódu Visual Basicu.

TIP:

Událost Error může nastat při chybném přístupu k datům v době, kdy není spuštěn programáto-rem vytvořený kód Visual Basicu.

Vykonáním událostní procedury při výskytu události Error můžete odchytit chybovouzprávu programu Visual Basic a zobrazit vlastní zprávu, která bude lépe vyhovovat vašíaplikaci, případně se pokusit chybu napravit. Událostní procedura má dva argumenty:

• DataErr – chybový kód vrácený objektem Err (jeho vlastností Number) v přípa−dě, že dojde k chybě. Vlastnost Description tohoto objektu obsahuje stručnýpopis chyby. Pomocí argumentu DataErr procedury Error můžete zjistit, jakáchyba se v aplikaci vyskytla.

• Response − vnitřní konstanta určující, zda bude či nebude zobrazena chybovázpráva. Možnosti nastavení argumentu Response jsou následující konstanty:

1. konstanta vbDataErrContinue znamená ignorovat chybu a pokračovat bezzobrazení výchozí chybové zprávy programu Visual Basic. Místo výchozíchybové zprávy můžete poskytnout vlastní chybovou zprávu.

2. konstanta vbDataErrDisplay je výchozí hodnotou argumentu Response a zna−mená zobrazení implicitně definované chybové zprávy.

113

Nabízíme zde pro lepší orientaci přehled zachytitelných chyb s jejich stručným popisemtak, jak budou kódy chyb a kontextový popis obsahovat vlastnosti Number a Descrip−tion objektu Err.

TIP:

Kódy chyb platí nejen pro chybové události, ale i pro chyby Visual Basicu, které se pomocí událost-ní procedury Error ošetřit nedají.

Kód Událost

3 Použití Return bez příkazu GoSub

5 Chybné volání procedury

6 Přetečení

7 Nedostatek paměti

9 Index mimo rozsah

10 Pole je pevné nebo dočasně zamknuté.

11 Dělení nulou

13 Typ nesouhlasí

14 Nedostatek místa v řetězci

16 Příliš složitý výraz

17 Požadovanou operaci nelze provést

18 Přerušeno uživatelem

20 Použití Resume bez chyby

28 Nedostatek místa na zásobníku

35 Podprogram, funkce nebo vlastnost není definována

47 Knihovnu DLL využívá příliš mnoho aplikací

48 Chyba při načítání knihovny DLL

49 Chybná konvence volání knihovny DLL

51 Vnitřní chyba

52 Špatný název nebo číslo souboru

53 Soubor nebyl nalezen

54 Špatný režim souboru

55 Soubor je již otevřen

57 Vstupně−výstupní chyba zařízení

58 Soubor již existuje

59 Chybná délka záznamu

61 Plný disk

62 Vstup za koncem souboru

UČEBNICE VISUAL BASICU 6.0

114

63 Chybné číslo záznamu

67 Příliš mnoho souborů

68 Zařízení není dostupné

70 Přístup odmítnut

71 Disk není připraven

74 Nelze přesunout na jinou jednotku

75 Chyba v přístupu k souboru nebo k cestě

76 Cesta nenalezena

91 Není nastavena objektová proměnná nebo proměnná bloku With

92 Neinicializovaná smyčka For

93 Chybný řetězec vzorku

94 Chybné použití Null

444 Metoda se nedá použít v tomto kontextu.

452 Chybné číslo procedury DLL

453 DLL funkce nenalezena

457 Klíč je již použit (zakázaná duplicita klíče)

460 Chybný formát schránky (Clipboard)

461 Specifikovaný formát dat není kompatibilní se spouštěnou metodou

480 Visual Basic nemůže vytvořit rastrový obrázek pro funkci automatickéhopřekreslování

481 Chybný obrázek

482 Chyba tiskárny

483 Ovladač tiskárny nepodporuje uvedenou vlastnost

484 Problémy při získávání tiskových informací ze systému. Ujistěte se, že tis−kárna je nastavena správně.

485 Chybný typ obrázku

520 Nelze vymazat schránku (Clipboard)

521 Nelze otevřít schránku (Clipboard)

Podrobnější popis chyb naleznete v elektronické nápovědě programu Visual Basic. Pří−kladem událostní procedury, která zobrazí vlastní chybové hlášení v situaci, kdy pro dal−ší běh aplikace (resp. požadovanou operaci) není dostatek paměti RAM zakončeme vý−klad týkající se klíčového slova Error ve smyslu události:

Private Sub Form_Error(DataErr As Integer, Response As Integer)

If DataErr = 7 Then

MsgBox “Nedostatek paměti. Operace bude zrušena.“, vbExclamation

Response = vbDataErrContinue

End If

End Sub

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

115

PPoouužžiittíí ppřřííkkaazzuu OOnn EErrrroorrNyní se zaměřme na zachytávání a odstraňování chyb generovaných při běhu programo−vého kódu Visual Basic. K tomu slouží příkaz Visual Basicu On Error. S příkazem OnError jsme se již setkali v úvodní kapitole při vytváření příkladu prohlížeče obrázků. Ny−ní si tedy programovou konstrukci zachytávání chyb popišme detailněji. Existuje trojímožná syntaxe tohoto příkazu:

1. On Error Resume Next Při výskytu chyby při běhu programu se řízení předá pří−kazu, který bezprostředně následuje za příkazem, u kterého se chyba vyskytla; zpra−cování pokračuje bez skoku.

2. On Error GoTo 0 Vypíná libovolnou rutinu pro obsluhu chyby v dané procedu−ře, pokud byla zapnuta. Bez použití příkazu On Error GoTo 0 je rutina pro obsluhuchyb vypnuta automaticky při opuštění procedury.

3. On Error GoTo řádek Tento příkaz zapíná rutinu pro obsluhu chyby, jejíž začá−tek je určen parametrem řádek, kde řádek je libovolné návěští řádku nebo číslo řád−ku. Při výskytu chyby při běhu programu se řízení předá rutině pro obsluhu chybyurčené parametrem řádek. Řádek určený parametrem řádek musí být součástí stejnéprocedury jako je příkaz On Error; v opačném případě vznikne chyba při překladu.

Nejtypičtější příklad použití příkazu On Error je v obecné podobě popsán na následu−jících řádcích:

Sub MojeProc()

On Error GoTo Chyba

sekce deklarací proměnných procedury

tělo procedury

Konec:

Exit Sub

Chyba:

MsgBox Err.Description

Resume Konec

End Sub

Pokud v proceduře při provádění nedojde k běhové chybě, provede se celé tělo proce−dury až k příkazu Exit Sub, kde se provádění procedury ukončí. Pokud však kdekoli v proceduře dojde k běhové chybě, řízení programu bude předáno na řádek uvozenýnávěštím Chyba. Za tímto návěštím následuje kód ošetření chyby. V našem případě pří−kaz MsgBox vytiskne chybové hlášení uložené ve vlastnosti Description objektu Erra příkaz Resume pak přenese řízení na řádek s návěštím Konec. Pak už bude procedu−ra ukončena.

Pokud se vyskytne běhová chyba v proceduře, která neobsahuje jejich ošetření,aplikace se zastaví a nebude možné pokračovat v práci.

UČEBNICE VISUAL BASICU 6.0

116

TIP:

V některých případech lze možné výskyty běhových chyb předvídat a ošetřit je tak precizněji nežpouhým ukončením běhu procedury. Např. před načítáním souboru z disku je vhodné ověřit, zdasoubor zadaného jména existuje či nikoli. To lze jednoduše provést voláním následující procedury:

Function FileExists (ByVal strFileName As String) As Boolean

FileExists = (Dir(strFileName) <> ““)

End Function

Funkce Dir vrací první soubor, který vyhovuje názvu souboru uvedeném v argumentufunkce. Pokud takový soubor nenalezne, vrací funkce řetězec nulové délky. ProceduraFileExists tedy vrací hodnotu True, pokud soubor (jehož název se předává do proměn−né strFileName) existuje a hodnotu False, pokud neexistuje.

I v této proceduře se však mohou vyskytnout běhové chyby, které je nutné ošetřit. A tokonkrétně chyba č. 71 – disk není připraven, pokud se soubor má hledat na disketě, je−jíž mechanika je prázdná nebo chyba č. 68 – zařízení není dostupné, pokud je za−dáno písmeno, kterému není přiřazen žádný disk.

Použití příkazu On Error doplněného do procedury FileExists by v tomto případě mo−hlo vypadat takto (je uveden pouze kód ošetření chyby č. 71):

If (Err.Number = 71) Then

If MsgBox(“Vložte disketu. Hotovo?“, vbExclamation + vbYesNo) =vbYes Then

Resume

Else

Resume Next

End If

End If

Příkaz Resume stojící samostatně vrací řízení procedury na příkaz, který chybu vyvolal.Příkaz Resume Next vrací řízení procedury na příkaz bezprostředně následující za pří−kazem, který chybu vyvolal.

TIP:

Syntaxe příkazu Resume ukončujícím chybovou rutinu má – stejně jako příkaz On Error – tři mož-né podoby.

Ošetření chyby č. 68 by vypadalo podobně.

TIP:

Při ladění programu může být užitečné zjistit chování vaší aplikace při výskytu některých konkrét-ních chyb. Možností, jak to udělat, je příkaz Error stojící samostatně. Tento příkaz vygeneruje chy-bovou zprávu, která odpovídá danému číslu chyby. Syntaxe: Error[(číslo chyby)]. Tato syntaxepředstavuje další význam slova Error při vytváření aplikací.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

117

TIP:

Údaje o chybách vygenerovaných při běhu programu se ukládají do vlastností objektu Err.

Existuje ještě jeden prostředek, který programátorovi pomáhá řešit chybové situace – ob−jekt Err. I s tímto objektem jsme se již v dřívějším textu setkali a nyní se u něho zasta−víme podrobněji. Objekt Err obsahuje informace o chybách vzniklých za běhu progra−mu. Dovoluje použití metod Raise a Clear pro generování a mazání chyb vzniklých zaběhu programu.

Syntaxe: Err[.{vlastnost | metoda}]

S některými vlastnostmi objektu Err jsme se již setkali, jiné jsou pro nás nové

• Number Hodnota určená jako argument v příkazu Error. Může být libovolnéplatné číslo chyby.

• Source Název současného projektu (sady modulů) v jazyce Visual Basic.

• Description Řetězec, který vrací funkce Error pro určenou hodnotu Num−ber, pokud takový řetězec existuje. Neexistuje−li tento řetězec, obsahuje hodnotavlastnosti Description text „Chyba způsobená aplikací nebo objektem.“

• HelpFile Určuje diskovou jednotku, úplnou cestu a soubor obsahující nápově−du programu Visual Basic.

• HelpContext Identifikátor kontextu v souboru nápovědy programu Visual Ba−sic Help pro chybu, která odpovídá vlastnosti Number.

• LastDLLError Vyskytuje se pouze u 32−bitových operačních systémů MicrosoftWindows. Obsahuje kód systémové chyby naposledy volané dynamické knihov−ny (DLL). Vlastnost LastDLLError je pouze pro čtení.

Metody objektu Err:

• Raise Generuje chybu při běhu programu.

• Clear Metoda Clear se používá pro explicitní vynulování objektu Err poté,co byla chyba obsloužena.

Program Visual Basic sám vyvolá metodu Clear vždy, když je proveden některý z uve−dených příkazů:

• libovolný příkaz Resume

• Exit Sub, Exit Function, Exit Property.

TIP:

Programátor může definovat své vlastní chyby funkcí CVErr. Jejich čísla mohou být v rozsahu 0– 65535, ale nesmějí se dostat do konfliktu s čísly chyb definovanými systémem MicrosoftAccess. Příkladem situace, kdy se může vygenerovat uživatelská chyba, je následující procedura:

Function Mocnina(Number)

If IsNumeric(Number) Then

UČEBNICE VISUAL BASICU 6.0

118

Mocnina = Number * Number ‘ Návratová hodnota.

Else

Mocnina = CVErr(65000) ‘ Návrat uživatelem definovaného

End If ‘ čísla chyby.

End Function

Pokud předaný argument Number (typu Variant) není číselného typu, funkce Mocninavrátí chybový kód číslo 65000. Procedura, která volá funkci Mocnina, pak pomocí funkceIsError pozná, zda vrácená hodnota je návratovou hodnotou procedury nebo číslemchyby. Konstrukce volání procedury

If IsError(Mocnina(Number)) Then

[příkazy]

End If

Otázky a úkoly:

1) Co jsou to zachytitelné chyby?

2) Projděte pečlivě všechny programy předcházejících lekcí této knihy a doplňte jeo kód ošetřující běhové chyby aplikací.

3) Vylepšete kód ošetřující běhové chyby aplikací tak, že každou chybu zapíše do tzv.LOG souboru – textového souboru, kde se zaznamená vždy datum a čas výskytuchyby a její popis.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

119

Lekce 13

LLaadděěnníí pprrooggrraammoovvééhhoo kkóódduuCíle lekce:

Naučit se efektivně ladit programový kód

Ladění napsaného programového kódu je – zvláště u rozsáhlejších aplikací – naprostonezbytnou součástí práce programátora. Pojem „ladění“ v sobě zahrnuje veškeré úpravya analyzování aplikace od prvního napsání programového kódu až k jeho konečné po−době. Každý, kdo někdy zkusil programovat v kterémkoli programovacím jazyce, zjistil,že zápisem programového kódu práce na programu zdaleka nekončí. První tzv. vyššíprogramovací jazyky nabízely jako prostředek pro ladění pouze jednoduchý editor. S po−stupujícím časem se rozvíjela i nabídka ladících nástrojů, které dovolují nejen editovatzdrojový text programu a opravovat chyby, ale především analyzovat program. Tyto ná−stroje tak pomáhají nejen při odhalování vašich vlastních chyb, kterých se při psaní pro−gramů dopustíte, ale také usnadňují modifikaci programů a slouží i ke snadnějšímu po−chopení principu činnosti aplikací vytvářených jiným programátorem.

TIP:

Při psaní programového kódu vždy počítejte s tím, že program bude jednou třeba upravit a že tu-to činnost již nemusíte provádět vy. Proto se snažte vytvářet programový text graficky i funkč-ně přehledný a nešetřete v něm komentáři. Může vám to později ušetřit mnoho času.

Při ladění kódu se budete setkávat se třemi druhy chyb:

1. První skupinu chyb tvoří chybný syntaktický zápis příkazů. Bez odstranění těchtochyb není možné program zkompilovat a tudíž ani spustit. Kontrola syntaxe vkláda−ných klíčových slov je prováděna již při vkládání kódu do okna Module. Při pře−chodu na další řádek pomocí klávesy ENTER se automaticky zkontroluje syntaxepříkazů právě vloženého řádku. Pokud je syntaxe chybná, Visual Basic vás na toupozorní a text tohoto řádku zčervená. Při samotném zápisu kódu tak odhalíte vět−šinu syntaktických chyb a následná kompilace pak již proběhne poměrně hladce.

TIP:

Automatickou kontrolu syntaxe při zápisu kódu lze zakázat. Dosáhnete toho zrušením zaškrtnutípole Auto Syntax Check (Automatická kontrola syntaxe) na kartě Module dialogového okna Opti-ons. Okno zobrazíte příkazem Tools/Options z horizontálního menu.

2. Dalším druhem chyb jsou chyby, které vznikají při běhu programu (RuntimeErrors). Tyto chyby vzniknou při provádění programu ve chvíli, kdy se program po−kouší provést nemožnou operaci. Nemožná operace může být např. dělení nulou,snaha o zápis souboru dat do neexistujícího adresáře apod.

121

3. Poslední skupinou chyb, které se detekují většinou nejhůře, jsou chyby sémantické.Program funguje navenek normálně, neobjevují se žádná chybová hlášení, ale výstu−py neodpovídají vašim očekáváním. Jinak řečeno, program dělá něco jiného, než jstepo něm chtěli. V takovém případě nezbývá, než se prokousávat postupně jednotlivý−mi částmi programu (trasovat ho) a hledat, kde se ještě program chová „normálně“a kde už sešel z cesty, kterou jste mu vyznačili. Pro trasování má naštěstí Visual Ba−sic velkou sadu pomocných nástrojů, které tuto část ladění programu velmi usnadní.

Aby bylo možné plně využít ladící nástroje Visual Basicu, je nutné v kritických momen−tech přerušit provádění kódu. Aktivním oknem se pak stane ladící okno. V ladícím okněpak můžete kontrolovat a nastavovat okamžité hodnoty výrazů a proměnných, vlastnos−tí jednotlivých objektů atd. Přerušení programu je možné docílit několika způsoby:

Nastavením zarážky na řádek, kde chcete, aby se program zastavil. Umístěte kurzor dookna Module na řádek, kde ještě není umístěna zarážka a pak klikněte na tlačítko „Bre−akpoint“ (zarážka) v panelu nástrojů. Můžete použít i příkaz Run/Toggle Breakpoint z ho−rizontálního menu, příp. klávesovou zkratku F9. Řádek se zarážkou bude v okně Modu−le (které zobrazuje prováděný kód) prosvícen.

Zrušení zarážky se provádí stejnými příkazy jako její nastavení, pokud je kurzor v okněModule umístěn na řádek s nastavenou zarážkou.

Pokud máte nastaveny zarážky, program se na nich při provádění kódu vždy zastaví. Podoladění programu je tedy třeba všechny zarážky vymazat. Všechny nastavené zarážky vy−mažete příkazem Run/Clear All Brekpoints, resp. klávesovou zkratkou CTRL+SHIFT+F9.Všechny nastavené zarážky se samy automaticky smažou při zavření programu Visual Ba−sic, ve kterém své aplikace vytváříte. Trvalé zarážky se dají nastavit příkazem Stop –viz dále.

Při zastavení běhu programu na zarážce zobrazí Visual Basic okno Module, ve kterém jeaktuální příkaz (právě prováděný) zobrazen v rámečku. Od tohoto okamžiku lze pro−gram trasovat, a to dvojím způsobem: jednak příkazem Run/Step Into (klávesová zkrat−ka F8), jednak příkazem Run/Step Over (klávesová zkratka SHIFT+F8).

Ikona „Step Into“ (krok do) a ikona „Step Over“ (krok přes) panelu nástrojů.

Příkazem Step Into se nejprve vykoná aktuální příkaz, a pak se automaticky pokračujenásledujícím příkazem. Postupně se tedy trasuje veškerý programový kód včetně proce−dur a funkcí volaných z procedury, odkud trasujete. Naproti tomu Step Over se používáu programů, kde tyto volané procedury jsou již odladěny a jejich trasování proto nenížádoucí – aktuální řádek tak stále zůstává v původní proceduře. Volaná procedura se přitomto typu trasování provede jako jeden celek.

Existuje ještě mnoho ladících fines, které vám mohou být při práci ve Visual Basicu uži−tečné. Uveďme nyní některé formou tipů:

UČEBNICE VISUAL BASICU 6.0

122

TIP:

Není nutné vykonávat všechny příkazy postupně. Příkaz Run/Set Next Statement z horizontálníhomenu (který je dostupný při přerušení běhu programu) nastaví jako aktivní příkaz ten, na kterémje právě umístěn kurzor. Další krokování pak probíhá od tohoto příkazu.

TIP:

V okně Module je možné na libovolné místo programu umístit kurzor a použít příkaz Run/Step toCursor, klávesová zkratka CTRL+F8.

Další možností, jak přerušit provádění kódu je umístění příkazu Stop na příslušné místozdrojového textu. Příkaz Stop působí naprosto identicky jako zarážka, s jednou výjim−kou. Po zavření a následném otevření příslušné aplikace zůstává příkaz Stop (na rozdílod klasických zarážek) na svém místě. Pomocí tohoto příkazu nastavíte zarážky trvale.

TIP:

Příkaz Stop představuje nastavení trvalých zarážek do programu, a proto musíte všechny jeho výsky-ty v konečné fázi úprav z aplikace vypustit.

Třetí možností, jak přerušit činnost programu je je použití kombinace klávesCTRL+BREAK.

LLaaddiiccíí ookknnooNyní je čas k podrobnému popisu ladicího okna jako hlavního nástroje k odhalovánía odstraňování chyb v programech Visual Basic. Okno Ladění se skládá ze dvou částí:

• z příkazového podokna, ve kterém lze sledovat hodnoty ovládacích prvků, polí,vlastností, vyhodnocovat výrazy, tisknout výsledky atd.

• z části Watch (používá se neobratný překlad kukáto), kde se sleduje hodnotakonkrétních proměnných pomocí výrazu kukátka. Pomocí výrazu kukátka lze ta−ké nastavit přerušení běžícího programu (podobně jako to dělají zarážky nebopříkaz Stop). Program se v tomto případě nepřeruší na konkrétním řádku, jakoje tomu u zarážek, ale ve chvíli, kdy se např. změní hodnota některé proměnnénebo tato hodnota dosáhne určité hodnoty.

Výrazy kukátka lze do okna Ladění přidat buď před spuštěním programu nebo přijeho přerušení. Slouží k tomu dialogové okno „Add Watch“ (Přidat kukátko) (vizobr. 24) které zobrazíte příkazem Tools/Add Watch z horizontálního menu.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

123

Obr. 61 Dialogové okno Add Watch (Přidat kukátko), kde se definují výrazy pro sledová−ní okamžitých hodnot.

Spodní rámeček v okně Přidat kukátko se nastavuje způsob vyhodnocení výrazu kukát−ka. Výraz může tvořit samostatný identifikátor proměnné nebo složitý výraz s množstvímoperátorů. Pokud nastavíte Typ kukátka na hodnotu Přerušit při pravdivosti výrazu ne−bo Přerušit při změně výrazu, bude mít hodnota výrazu kukátka význam zarážky při bě−hu programového kódu ve smyslu, který byl popsán v předcházejících řádcích. V podok−ně kukátka ladícího okna se vlevo od každého definovaného výrazu kukátka zobrazí ta−ké grafická ikona jeho typu. Zde jsou tyto ikony:

• Přerušit při pravdivosti výrazu (Break When Value Is True),

• Přerušit při změně výrazu (Break When Value Changes),

• Výraz kukátka (Watch Expression) .

Rámeček Context slouží k omezení oboru, který bude použit pro sledování proměnných.Visual Basic provede vyhodnocení výrazu rychleji ve zúženém kontextu.

Kromě podokna kukátka v ladícím okně můžete využít i další nástroj pro sledování hod−not výrazů. Tlačítkem „Instant Watch“ (okamžité kukátko) z panelu nástrojů (resp. pří−kazem Tools/Instant Watch nebo klávesovou zkratkou SHIFT+F9) můžete zobrazit libo−volný výraz, který při přerušení běhu programu zvýrazníte v okně Module.

Druhým podoknem ladícího okna je příkazové podokno. Příkazové podokno je schop−né vyhodnotit jakýkoli platný výraz včetně volání procedur Sub a Function. Hodnoty sev příkazovém podokně zobrazují metodou Print objektu Debug. Tuto metodu lze volatjednak z programového kódu nebo ji zapsat rovnou do příkazového podokna. Pokudzapisujete výraz přímo do příkazového podokna, lze to udělat tímto způsobem:

Debug.Print výraz

TIP:

Není-li příkazové podokno otevřeno před spuštěním běhu programu, samotné vykonání příkazu De-bug.Print ho nezobrazí. Výstup sice bude směřován do tohoto okna, ale zobrazené hodnoty si bu-dete moci prohlédnout až po přerušení běhu aplikace, kdy bude možné toto podokno zobrazit.

UČEBNICE VISUAL BASICU 6.0

124

TIP:

Příkazové podokno lze používat nejen ke zjišťování hodnot výrazů, ale také k přiřazení hodnotvlastnostem a proměnným. Syntaxe je v tomto případě zcela stejná jako při přiřazování hodnot vprogramovém kódu procedur.

TIP:

Pokud máte v příkazovém podokně zapsaný příkaz, který chcete provést znovu, nemusíte jej jižvypisovat. Stačí na příslušný řádek umístit kurzor a stisknout klávesu ENTER. Příkaz se znovu vy-hodnotí.

Při tvorbě aplikací se dá využít příkazů Visual Basicu, které neřídí aplikaci přímo při je−jím běhu, ale zprostředkovaně tím, že ovládají kompilátor systému Visual Basic – jsou topříkazy kompilátoru, které jsou oproti „klasickým příkazům uvozeny znakem dvojitéhokříže (#).

Podmíněná kompilace kódu se dá použít pro zahrnutí nebo vyřazení kódu, který se lišípro různé mutace vytvářené aplikace.

Podmíněná kompilace představuje poslední ze základních ladicích nástrojů, které si v na−ší učebnici popíšeme. Pro podmíněnou kompilaci se využívají příkazy kompilátoru#If...Then a #End If.

TIP:

Od příkazů Visual Basicu se příkazy kompilátoru liší pouze symbolem dvojitého kříže (#) a i synta-xe obou konstrukcí je shodná.

Je−li výraz typu Boolean umístěný mezi klíčovými slovy If a Then pravdivý, pak je kód,který následuje, zahrnut do kompilace.

TIP:

Na řádku s příkazem pro podmíněnou kompilaci nesmí být uveden žádný jiný příkaz. Není zde te-dy možné použít oddělení příkazů dvojtečkami.

TIP:

Pro podmíněnou kompilaci lze předdefinovat argumenty, jimž přiřadíte hodnoty v poli Conditio-nal Compilation Arguments (Argumenty podmíněné kompilace) karty Advanced dialogového ok-na Options (příkaz Tools/Options). Je možná i explicitní deklarace konstant určených pro podmí-něnou kompilaci pomocí klíčového slova #Const. Konstanty definované tímto způsobem nejsoudostupné v programovém kódu při běhu programu.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

125

Otázky a úkoly:

1) Jaké možnosti ladění má Visual Basic? Srovnejte je s možnostmi vývojových prostře−dí jiných programovacích jazyků.

2) Jaké jsou možnosti zjistit aktuální hodnotu proměnných při pozastaveném běhuprogramu?

3) Je možné při pozastaveném běhu programu definovat hodnotu proměnných? Jak?(Použijte Immediate Window).

UČEBNICE VISUAL BASICU 6.0

126

Lekce 14

MMDDII ffoorrmmuulláářřeeCíle lekce:

Pochopit význam MDI formulářů ve srov−nání s klasickými formuláři a naučit seMDI formuláře využívat všude tam, kde jejejich použití výhodnější ve srovnání s kla−sickými formuláři.

Přibližme si nyní termín, se kterým jsme se zatím ve výkladu nesetkali – MDIForm. Jižnázev MDI (multiple document interface, tedy vídedokumentové nebo spíš víceformulá−řové rozhraní) napovídá, že pomocí MDI formuláře bude možné spolu propojit více for−mulářů. Skutečně – jedná se o běžný formulář, na který však může být navázáno mnohojiných formulářů. Vlastnosti těchto „vnořených“ formulářů stejně jako jejich ovládacíchprvků jsou dostupné z jejich rodičovského MDI formuláře.

Tento způsob ovládání aplikace je vhodný tam, kde je nutné, aby uživatel měl otevřenarůzná aplikační okna, přičemž charakter jejich obsahu je podobný a tudíž mají stejné ne−bo podobné ovládání.

TIP:

Uvědomte si, že například aplikace Microsoft Office umožňují v jedné instanci programu otevřítvíce dokumentů – ve Wordu více dokumentů DOC, v Excelu více tabulek atd. Tyto aplikace jsou te-dy také příkladem použití technologie MDI.

V krátkosti řečeno techologie MDI představuje programovací techniku, pomocí níž mů−že programátor otevírat nebo zavírat formuláře vnořené do jednoho rodičovského okna,specifikovat nebo zjišťovat, který z vnořených formulářů je aktivní a tento aktivní formu−lář následně ovládat nebo z něho přebírat informace.

Abychom si názorně přiblížili funkci MDI formulářů, vytvoříme vzorovou aplikaci pro vy−tváření a editování textových dokumentů. Cílem je, aby uživatel v aplikaci mohl praco−vat s více textovými dokumenty najednou. Dostupné funkce budou

• Založení nového dokumentu,

• používání funkcí schránky – Kopírovat a Vložit.

Při vytváření aplikace postupujte podle následujícího návodu:

Otevřete Visual Basic a vytvořte nový standardní projekt

Příkazem nabídky Project/Add MDIForm přidejte do projektu nový MDI formulář. V tétochvíli tedy projekt obsahuje dva zatím nezávislé formuláře – MDIForm1 a standardníForm1.

Ve formuláři Form1 vytvořte textbox s názvem Text1 tak, aby zabíral celou plochu for−muláře. Formulář Form1 bude sloužit jako šablona nově vytvářených dokumentů.

127

Vložte do projektu standardní modul (Module1) a umístěte do něho následující kód

Sub FileNew

Dim NewDoc As New Form1

‘ Vytvoř novou instanci Form1

NewDoc.Show

End Sub

Nastavte následující vlastnosti objektů:

TIP:

Nastavením vlastnosti MDIChild formuláře Form1 na hodnotu True určujeme, že tento formulářbude vnořen do rodičovského okna MDIForm1. Vzhledem k tomu, že nikde nedefinujeme, na kte-ré rodičovské okno má být Form1 navázán, je zřejmé, že každý projekt ve Visaul Basicu může ob-sahovat nejvýše jeden MDI formulář.

Ve formuláři MDIForm1 vytvořte menu tak, aby mělo jednu rozbalovací položku Soubornazvanou mnuFile a vnořené příkazy Nový (s názvem mnuFileNew) a Konec (s názvemmnuFileExit).

Menu vytvořte i ve formuláři Form1 – bude mít rozbalovací položku Soubor nazvanoumnuFile a vnořené příkazy Nový (s názvem mnuFileNew), Zavřít (mnuFileClose) a Ko−nec (s názvem mnuFileExit). Příkazy se až na „Zavřít“ shodují s příkazy menu rodičov−ského formuláře.

Dále vytvořte ve formuláři Form1 rozbalovací položku Úpravy (mnuEdit) s vnořenýmipříkazy Kopírovat (mnuCopy) a Vložit (mnuPaste).

Nyní přidáme do formulářů programový kód. První bude kód k formuláři Form1. Tentokód zabezpečí, že i po změně velikosti formuláře zůstane textové pole roztažené po ce−lé ploše formuláře:

Private Sub Form_Resize ()

‘ Roztažení textového pole

Text1.Height = ScaleHeight

Text1.Width = ScaleWidth

End Sub

TIP:

V textu je záměrně použit odkaz Text1.Height namísto Form1.Text1.Height. V uvedeném případěse bude odkaz vztahovat vždy k aktivnímu oknu, ačkoli otevřených dokumentů může být v apli-kaci více.

Další procedury ve formuláři Form1 budou definovány takto:

Sub mnuFileClose_Click()

‘ Zavřít tento formulář.

UČEBNICE VISUAL BASICU 6.0

128

Unload Me

End Sub

Private Sub mnuFileExit_Click()

‘ Zavřít rodičovský formulář

Unload MDIForm1

End Sub

Private Sub mnuFileNew_Click()

‘ Vytvoření nového dokumentu

FileNew

End Sub

Private Sub mnuCopy_Click()

Clipboard.SetText MDIForm1.ActiveForm.ActiveControl.SelText

End Sub

Private Sub mnuPaste_Click()

MDIForm1.ActiveForm.ActiveControl.SelText = Clipboard.GetText()

End Sub

Výše uvedené dvě procedury používají schránku k přenášení textu mezi dokumenty.

TIP:

Zavření MDI formuláře vyvolá událost QueryUnload pro každý vnořený formulář a posléze i proMDI formulář. Nastavení argumentu Cancel na hodnotu True v kterékoli událostní proceduře Que-ryUnload zruší zavírání aplikace.

Do formuláře MDIForm1 vepište pouze tento kód:

Private Sub mnuFileExit_Click()

‘ Zavřít rodičovský formulář

Unload MDIForm1

End Sub

Private Sub mnuFileNew_Click()

‘ Vytvoření nového dokumentu

FileNew

End Sub

Tím je celá aplikace hotová a můžete ji vyzkoušet.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

129

Otázky a úkoly:

1. Jaký je základní rozdíl mezi běžným formulářem a formulářem MDI?

2. V příkladu uvedeném v této kapitole si všimněte používání menu. Proč je nutnépoložky Zavřít a Konec definovat v obou formulářích (rodičovském i vnořeném)?

3. Rozšiřte uvedený příklad tak, aby kromě funkcí schránky Kopírovat a Vložit obsa−hoval i funkci Vyjmout.

4. Rozšiřte uvedený příklad o možnost formátování textu (velikost a formát písma, za−rovnání atd.) Pro definici formátování vytvořte panel nástrojů.

5. Rozšiřte uvedený příklad o možnost otvírání a ukládání textových souborů.

Pokud si nebudete s některými úkoly vědět rady, podívejte se do vzorového příkladuMdinote.vbp, který je součástí instalace Visual Basicu a je umístěn ve složce /sam−ples/PGuide/MDI.

Otázky a úkoly:

1) Jaký je rozdíl mezi MDI formulářem a obyčejným formulářem?

2) Kdy je vhodné využít MDI formulář?

3) Rozšiřte program uvedený v této lekci tak, aby text jednotlivých oken mohl býtukládán do textových souborů a zase z těchto souborů editován.

UČEBNICE VISUAL BASICU 6.0

130

Lekce 15

VVyyttvváářřeenníí DDLLLL kknniihhoovveennCíle lekce:

Pochopit význam DLL knihoven a naučit sepracovat s projektem Visual Basicu tak, abybylo možné vytvářené DLL knihovny testo−vat přímo ve vývojovém prostředí VisualBasicu.

Zatím jsme se setkávali pouze s projekty typu Standard EXE – tedy se spustitelnými pro−jekty. Po kompilaci se z těchto projektů stanou klasické spustitelné EXE soubory. Ve Vi−sual Basicu však můžete tvořit i aplikace, které jsou svým charakterem jiné – ActiveX ne−bo DLL projekty.

DLL knihovna funkcí je soubor s příponou DLL, který umí provádět operace, které seběžně provádějí v mnoha různých aplikacích. Pokud budete vytvářet aplikaci, která uni−verzálně řeší některý např. početní problém, vyplatí se ji naprogramovat jako DLLknihovnu. DLL knihovně lze definovat vlastnosti a metody, jako má kterýkoli jiný objekt.

Nad DLL knihovnou potom lze naprogramovat řadu aplikací, které si vytvoří vlastní in−stanci DLL knihovny, naplní vstupní vlastnosti knihovny a zavolá metody knihovny re−prezentující její funkce. Tyto funkce naplní hodnotami soubor výstupních vlastností,které si nadřazená aplikace vezme k dalšímu zpracování nebo vizualizaci.

Mějme aplikaci, která se bude spouštět ve vícejazyčném módu – to znamená, že všech−ny popisky k aplikaci budou uloženy v databázi a podle toho, v jakém jazykovém mó−du je aplikace spuštěna, se musejí zobrazit i popisky. Např. Pokud si aplikaci spustí Čech,bude např. titulek na tlačítku ukončujícím běh aplikace „Konec“, v německé mutaci bu−de nápis „Beenden“ a v anglické „Quit“.

Nejprve tedy vytvoříme databázi Microsoft Access, která bude mít jedinou tabulku s ná−zvem „JazykTable“ a čtyřmi sloupci – „ID“ (identifikační číslo záznamu a primární klíč),„CZ“, „DE“ a „EN“ – pole typu TEXT, v nichž budou uloženy popisky.

Za účelem výběru textu vytvoříme DLL knihovnu, jejímž vstupem bude jazyk (hodnotyCZ, DE nebo EN) a primární klíč položky v databázi. Výstupem bude textový řetězecv příslušném jazyce.

Jakým způsobem tedy vytvořit DLL knihovnu a zkoušet její funkce?

Založte nejprve nový projekt Visual Basicu, ovšem tentokrát nikoli Standard Exe, ale Acti−veX DLL. Do projektu bude automaticky vložen modul třídy (Class module), který pře−jmenujte na „Language“, samotný projekt přejmenujte na „LanguageServer“. Dále založtev projektu nový BAS modul a pojmenujte jej „StartUp“. Nyní by okno projektu mělo vy−padat podle obr. 62.

131

obr. 62 Okno Projektu se dvěma založenými moduly.

Nyní můžeme přistoupit k definici vlastností a metod knihovny DLL.

TIP:

Zapamatujte si: všechny proměnné, resp. funkce a procedury, které jsou v deklaraci uvozeny klí-čovým slovem Public, jsou přístupné z vnějšku DLL knihovny a jeví se tedy jako vlastnosti, resp.metody knihovny jako celku.

Nejprve budeme potřebovat nadefinovat vstupní vlastnosti knihovny – jazyk a ID zázna−mu. V deklarační sekci modulu třídy nadefinujte:

Private m_Jazyk As String

Private m_ID As Long

Private m_Text As String

Public Connection As rdoConnection

dále zadejte příkaz nabídky Tools/Add Procedure. Otevře se dialog, který je zachycen naobr. 63. V References projektu LanguageServer musí být zatrženo Microsoft Remote Da−ta Object.

obr. 63 Dialog pro zakládání metod a vlastností knihovny.

Vyplňte dialog podle obr. 63 a klepněte na tlačítko OK. V projektu se objeví následující kód:

Public Property Get Jazyk() As Variant

End Property

UČEBNICE VISUAL BASICU 6.0

132

Public Property Let Jazyk(ByVal vNewValue As Variant)

End Property

Tímto způsobem je nadefinovaná vlastnost Jazyk. Procedura Get se spustí ve chvíli, kdyaplikace nadřazená naší DLL knihovně bude číst hodnotu vlastnosti. Procedura Let budespuštěna při definování vlastnosti nadřazenou aplikací. Vzhledem k tomu, žechceme, aby vlastnost byla pouze vstupní a nikoli výstupní, celou proceduru Get sma−žeme a do procedury Let přidáme následující kód:

Public Property Let Jazyk(ByVal vNewValue As Variant)

m_Jazyk = vNewValue

End Property

Stejným způsobem založíme i vlastnost ID, která bude také pouze vstupní:

Public Property Let ID(ByVal vNewValue As Variant)

m_ID = vNewValue

End Property

Poslední vlastností bude Text, která bude jen pro čtení (výstupní vlastnost):

Public Property Get Text() As Variant

Text = m_Text

End Property

Nyní přistoupíme k naprogramování metody GetText, která bude přiřazovat do proměn−né m_Text textový řetězec z databáze podle zadaného jazyka. Příkazem Tools/Add Pro−cedure založíme veřejnou proceduru (Sub) s názvem GetText:

Public Sub GetText()

Dim rst As rdoResultset

Dim strSQL As String

strSQL = “SELECT “ & m_Jazyk & “AS txt FROM JazykTable WHERE ID=“ _

& m_ID

Set rst = Connection.OpenResultset(strSQL, rdOpenDynamic, rdConcurRowVer)

If Not rst.EOF Then m_Text = rst!txt

End Sub

TIP:

Metoda GetText předpokládá, že vstupní parametry jsou zadány správně a neošetřuje běhovéchyby, které se mohou vyskytnout na základě špatného zadání vstupních vlastností.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

133

Nyní již zbývá pouze přidat do projektu proceduru Main. Tu přidáme do BAS modulu,který jsme nazvali StartUp:

Sub main()

‘Inicializace proměnných

End Sub

Tato procedura se má spustit při založení instance DLL knihovny volající aplikací. Zdenemá příliš význam, ale ve složitějších příkladech ji lze použít pro přiřazení implicitníchhodnot globálním proměnným. K tomu, aby se procedura při založení skutečně spusti−la, je zapotřebí ji nadefinovat jako StartUp objekt v dialogu podle obr. 64.

obr. 64 Okno vlastností projektu.

Nyní je projekt DLL knihovny hotový a zbývá vytvořit volající aplikaci, která bude s DLLknihovnou pracovat. Zadejte příkaz nabídky File/Add Project a založte nový projekt Stan−dard EXE. V Okně projektu na něj klepněte pravým tlačítkem myši a z pohotovostníhomenu zvolte „Set as Start Up“ – tím zařídíte, aby se Standard EXE projekt spouštěl vždyjako první. Okno projektu nyní bude vypadat tak jako na obr. 65.

Obr. 65 Okno projektu

UČEBNICE VISUAL BASICU 6.0

134

V Referencích projektu Standard EXE je zapotřebí zatrhnout Microsoft Remote DataObject a LanguageServer, který se v okně referencí automaticky objeví (viz obr. 66).

obr. 66 Reference Projektu Standard EXE

Zbývá přidat do projektu následující testovací kód:

Dim m_con As rdoResultset

Dim txt As String

Private Sub Form_Load()

Dim LangSvr As Object

Set LangSvr = CreateObject(“LanguageServer.Language“)

LangSvr.Jazyk = “CZ“

LangSvr.ID = 10

Set LangSvr.Connection = m_con

LangSvr.GetText

txt = LangSvr.Text

Set LangSvr = Nothing

End Sub

TIP:

Pozor: před spuštěním tohoto kódu je nutné nejprve do proměnné m_con přiřadit platné spojenís databází tak, jak jsme se to naučili v lekci věnované přístupu k datům. Jinak program nebudefungovat.

ČÁST 2 – PROGRAMOVÁNÍ VE VISUAL BASICU

135

Otázky a úkoly:

1) Doplňte metodu GetText o kód, který ošetřuje chybné zadání vstupních parametrůConnection, m_ID a m_Jazyk.

2) Zkompilujte DLL knihovnu LanguageServer a použijte ji v projektu Standard EXEv již zkompilovaném tvaru.

3) Pokuste se vytvořit ActiveX EXE projekt. Jak se liší od ActiveX DLL?

4) V projektech ActiveX DLL je možné definovat také události (Events – viz obr. 63).Jaký mají význam a k čemu je možné je využít?

UČEBNICE VISUAL BASICU 6.0

136

PPřřeehhlleedd kkllííččoovvýýcchh sslloovv VViissuuaall BBaassiicc ffoorr AApppplliiccaattiioonn

Direktivy překladače

Direktivy překladače jsou specifické příkazy, které využívá kompilátor jazyka Visual Ba−sic pro podmíněnou kompilaci zdrojového textu.

#Const Používá se pro definici konstant pro podmíněný překlad v programuVisual Basic.

#If...Then, #ElseIf, #Else, #End If

Označení části programu v jazyce Visual Basic pro podmíněný překlad.

Syntaxe:

#If expression Then

statements

[#ElseIf expression−n Then

[elseifstatements]]

[#Else

[elsestatements]]

#End If

Funkce

Abs Vrací absolutní hodnotu čísla. Syntaxe: Abs(číslo)

Array Vrací proměnnou typu Variant obsahující pole

Syntaxe: Array(seznamagrumentů).

Seznam argumentů definuje členy nově vzniklého pole.

Asc Vrací kód prvního znaku v řetězci, kteý je argumentem funkce.

Syntaxe: Asc(řetězec)

Atn Vrací funkční hodnotu funkce arkustangens v bodě určeném argu−mentem. Vrácená hodnota úhlu je v radiánech. Syntaxe: Atn(číslo)

CBool Konvertuje argument na typ Boolean. Argumentem je libovolný plat−ný numerický nebo řetězcový výraz. Je−li výraz roven nule, Cboolvrací False; jinak vrací True.

CByte Konvertuje argument na typ Byte. Tato funkce správně rozpoznáváoddělovače desetinné části, případně tisíců, podle nastavení v systému.

CCur Konvertuje argument na typ Currency. Tato funkce správně rozpo−znává různé formáty měn, oddělovače desetinné části, případně tisíců,podle nastavení v systému.

137

CDate Konvertuje argument na typ Date. Funkce CDate rozlišuje formáty da−ta podle místního nastavení.

CDbl Konvertuje argument na typ Double. Tato funkce správně rozpoznáváoddělovače desetinné části, případně tisíců, podle nastavení v systému.

Choose Vybere a vrátí hodnotu ze seznamu argumentů, jejíž pořadí v sezna−mu určuje index. Syntaxe: Choose(index, volba−1[, volba−2, ... [, vol−ba−n]]) Funkce se používá v případech, kdy index představuje hodno−tu společnou pro určitou skupinu.

Chr Vrací znak se specifickým kódem. Syntax: Chr(kód znaku). NapříkladChr(10) vrací znak pro přesun na další řádek (linefeed).

CInt Konvertuje argument na typ Integer. Funkce CInt rozlišuje formátydata podle místního nastavení. Tato funkce správně rozpoznává oddě−lovače desetinné části, případně tisíců, podle nastavení v systému.

CLng Konvertuje argument na typ Long. Funkce CLng rozlišuje formáty da−ta podle místního nastavení. Tato funkce správně rozpoznává oddělo−vače desetinné části, případně tisíců, podle nastavení v systému.

Cos Vrací funkční hodnotu funkce kosinus pro úhel určený zadaným argu−mentem v radiánech.

CreateDatabase Vytvoří novou databázi. Tento identifikátor je však výhodnější použí−vat jako metodu objektu Workspace.

CreateObject Vytvoří objektové propojení OLE s objektem mechanismu. Argumen−tem funkce je třída objektu. Proměnná třída používá syntaxi: „jmé−no_apl.typ_objektu“.

CSng Konvertuje argument na typ Single. Funkce CSng rozlišuje formáty da−ta podle místního nastavení. Tato funkce správně rozpoznává oddělo−vače desetinné části, případně tisíců, podle nastavení v systému.

CStr Konvertuje argument na typ String. Tato funkce správně rozpoznáváoddělovače desetinné části podle nastavení v systému.

CurDir Vrátí aktuální cestu. Syntaxe: CurDir[(disk)]

CVar Konvertuje výraz na typ Variant.

CVErr Vrací subtyp Error typu Variant s číslem chyby – argumentemfunkce. Argument číslo chyby je libovolné platné číslo chyby. Pomocífunkce CVErr můžete ve svých procedurách definovat vlastní typychyb.

Date Vrací aktuální systémové datum. Systémové datum se nastavuje pomo−cí příkazu Date.

DateAdd Vrací datum, ke kterému byl přidán zadaný časový interval. Vracenáhodnota je typu Variant. Syntaxe: DateAdd(interval, number, date).Následující ukázka přidá jeden měsíc k datu 31. leden: DateAdd(“m“, 1, “31−Led−95“).

DateDiff Vrátí počet časových intervalů mezi dvěma zadanými daty.

UČEBNICE VISUAL BASICU 6.0

138

Syntaxe:

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DatePart Vrací zadanou část data. Syntaxe:

DatePart(interval, date[, firstdayofweek[, firstweekofyear]])

DateSerial Vrací datum zadaného roku, měsíce a dne ve formátu Date.

Syntaxe: DateSerial(year, month, day)

DateValue Vrací zadané datum ve formátu Date. Syntaxe: DateValue(datum).Funkce DateValue je schopna poznat jednoznačné datum, které ob−sahuje jména měsíců a to buď v dlouhém nebo zkráceném tvaru.

Například kromě formátů 12/30/1991 a 12/30/91 rozeznává funkceDateValue také tvar December 30, 1991 a Dec 30, 1991.

Day Vrací celé číslo od 1 do 31 včetně, které je pořadovým číslem dne v měsíci. Syntaxe: Day(datum)

Dir Vrací jméno souboru, adresáře nebo složky, které odpovídá zadanémuvzoru nebo atributu souboru nebo jménu disku.

Syntaxe: Dir[(cesta a jméno[, atributy])]

DoEvents Dočasně přerušuje zpracování. Operační systém potom může zpraco−vat jiné události. Syntaxe: DoEvents( )

Funkce DoEvents vrací jako hodnotu počet otevřených formulářův samostatně běžícím programu Visual Basic jako je Visual Basic, Stan−dardní verze. Funkce DoEvents předává řízení operačnímu systému.Řízení je programu, který funkci DoEvents zavolal, vráceno zpět ažv okamžiku, kdy operační systém dokončil zpracování událostí čekají−cích ve frontě. U programu Microsoft Windows musejí být navíc odeslány všechny klávesové povely z fronty SendKeys.

Environ Vrací řetězec sdružený s proměnnou prostředí operačního systému.

Syntaxe: Environ({envstring | number}).

Syntaxe funkce Environ obsahuje tyto pojmenované argumenty:

envstring Řetězcový výraz s názvem proměnné prostředí.

number Číselný výraz odpovídající pořadí řetězce v tabulce řetěz−ců prostředí. Argument number může být libovolné číslo,to je však před vyhodnocením zaokrouhleno na celočí−selnou hodnotu.

EOF Vrací hodnotu False nebo True informující o tom, zda již bylo dosa−ženo konce specifikovaného souboru.

Syntaxe: EOF(číslo souboru)

Argument číslo souboru je jakékoli platné číslo souboru, pomocí kte−rého může příkaz Open soubor otevřít. Hodnoty 1 – 255 se používajípro soubory nepřístupné jiným aplikacím, hodnoty 256 – 511 pro sou−bory přístupné i z jiných aplikací.

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

139

Error Vrací chybovou zprávu, která odpovídá danému číslu chyby.

Syntaxe: Error[(číslo chyby)]

Je−li argument číslo chyby vynechán, je vrácena zpráva odpovídajícíposlední předešlé chybě při běhu programu. Hodnota vracená funkcíError odpovídá vlastnosti Description objektu Err.

Exp Vrací funkční hodnotu přirozené exponenciální funkce, jejímž moc−něncem je e (základ přirozeného logaritmu) a mocnitelem zadaný ar−gument. Syntaxe: Exp(exponent) Konstanta e je přibližně rovna číslu2,718282.

FileAttr Vrací typ přístupu k souboru a informace o popisovači souboru prosoubory otevřené příkazem Open.

Syntaxe: FileAttr(číslo souboru, returntype)

Popis:

číslo souboru Jakékoli platné číslo souboru.

returntype Číslo označující typ informace, která má být vrácena.Chcete−li získat hodnotu určující přístup k souboru,zadejte 1. Pro získání popisovače souboru zadejte čí−slo 2.

Pokud je proměnné returntype přiřazeno číslo 1, určují následujícívracené hodnoty u zadaného souboru přístupový režim:

1 Jen čtení

2 Jen zápis

4 Náhodný přístup

8 Přidávání

32 Binární

FileDateTime Vrací data určující datum a čas, kdy byl soubor vytvořen nebo napo−sledy pozměněn. Syntaxe: FileDateTime(cesta a jméno)

Datum a čas se ukládají interně jako různé součásti reálného čísla.Hodnota na levé straně desetinné čárky představuje datum, hodnotana pravé straně desetinné čárky představuje čas.

FileLen Vrací délku souboru v bajtech. Syntaxe: FileLen(cesta a jméno)

Pro zjištění délky otevřeného souboru lze použít funkci LOF.

Fix Vrací celou část čísla. Syntaxe: Fix(číslo)

Je−li číslo záporné, vrací funkce Fix nejbližší vyšší nebo rovné celézáporné číslo. Například funkce Fix převede číslo −8.4 na −8.

Format Formátuje výraz podle instrukcí pro formátování výrazu.

Syntaxe:Format(výraz[, formát[, první_den_týdne[, první_týden_ro−ku]]])

výraz Jakýkoli platný výraz.

UČEBNICE VISUAL BASICU 6.0

140

formát Platné jméno uživatelsky definovaného formátu výrazu.

první_den_týdne Konstanta určující první den v týdnu.

první_týden_roku Konstanta určující první týden v roce.

FreeFile Vrací další číslo souboru, které může být použito u příkazu Open.

Syntaxe: FreeFile[(číslo rozsahu)]

FV Vrací příští hodnotu anuity (investice) na základě periodických, kon−stantních splátek a konstantní úrokové míry. Anuita představuje uklá−dání pravidelných splátek ve stálé výši, prováděné po určitou dobu.

Syntaxe: FV(rate, nper, pmt[, pv[, type]])

rate Úroková sazba za jedno období.

nper Celkový počet splátek (násobek cyklů).

pmt Výše pravidelné splátky. Výše splátek a úroková sazba sevětšinou po dobu spoření nemění.

pv Okamžitá výše vkladu.

type Argument určující, zda jsou splátky splatné vždy na za−čátku nebo na konci cyklu. Jsou−li splatné na konci cy−klu, platí 0, jinak 1. Je−li vynechán, předpokládá se 0.

GetAllSettings Vrací seznam klíčů a jejich hodnot ze záznamu aplikace v registruprogramu Windows.

Syntaxe: GetAllSettings(appname, section)

appname výraz typu String, který obsahuje název aplikace neboprojektu, jehož hodnoty klíčů jsou požadovány.

section výraz typu String, který obsahuje název oddílu, jehožklíče jsou požadovány. Funkce GetAllSettings vrací typVariant, který obsahuje dvourozměrné pole řetězců. Ty−to řetězce obsahují všechny klíče z určeného oddílua jim odpovídající hodnoty.

GetAttr Vrací číslo charakterizující atributy souboru, adresáře nebo složky.

Syntaxe: GetAttr(cesta a jméno)

Hodnota vrácená funkcí GetAttr je součtem následujících hodnot atributů:

Hodnota Konstanta Popis

0 vbNormal Normální.

1 vbReadOnly Pouze pro čtení.

2 vbHidden Skrytý.

4 vbSystem Systémový soubor.

16 vbDirectory Adresář nebo složka.

32 vbArchive Soubor byl od posledního zálohování pozměněn.

Ke zjištění, které atributy jsou nastaveny, lze použít operátor Andk bitovému porovnání hodnot vrácených funkcí GetAttr a hodnotyžádaného atributu. Např.: Result = GetAttr(FName) And vbHidden

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

141

Nenulová hodnota bude vrácena v případě, že je atribut vbHidden na−staven.

GetObject Vytvoří propojení OLE s objektem mechanismu ze souboru.

Syntax: GetObject([cesta][, třída])

Popis:

cesta Kompletní cesta a jméno souboru, z něhož má být vytvo−řen objekt. Jestliže cesta není zadána, je nutné zadat tří−du.

třída Řetězec určující třídu objektu. Proměnná třída používásyntaxi „jméno_apl.typ objektu“ a má tyto části.

jméno_apl Jméno aplikace pracující s objektem.

typ objektu Typ nebo třída objektu, který má být vytvořen.

GetSetting Vrací hodnotu vybraného klíče ze záznamu aplikace v registru progra−mu Windows.

Syntaxe: GetSetting(appname, section, key[, default])

Popis:

appname výraz typu String, který obsahuje název aplikace neboprojektu, jehož hodnoty klíčů jsou požadovány.

section výraz typu String, který obsahuje název oddílu, kde seklíč nalézá.

key výraz typu String, který obsahuje název klíče, jehožhodnota má být vrácena.

default výraz, který obsahuje hodnotu, která má být vrácenav případě, že klíč nemá nastavenu žádnou hodnotu.

Hex Vrací řetězec, který zobrazuje hexadecimální hodnotu čísla.

Syntaxe: Hex(číslo)

Můžete používat přímo hexadecimální čísla tak, že před ně vložíterozlišovací sekvenci: &H. Například &H10 je číslo 16 v hexadecimál−ním zápisu.

Hour Vrací celé číslo od 0 do 23 včetně, které vyjadřuje denní hodinu.

Syntaxe: Hour(čas)

Argument je libovolný číselný nebo řetězcový výraz nebo libovolnákombinace čísel a znaků, která může vyjadřovat čas.

IIf Vrací jednu ze dvou hodnot v závislosti na výsledku vyhodnocení vý−razu. Syntaxe: IIf(expr, truepart, falsepart)

Syntaxe funkce IIf obsahuje tyto pojmenované argumenty:

expr Vyhodnocovaný výraz.

truepart Hodnota vrácená funkcí při expr rovno True.

falsepart Hodnota vrácená funkcí při expr rovno False.

UČEBNICE VISUAL BASICU 6.0

142

Input Vrací znaky z otevřeného sekvenčního nebo binárního souboru.

Syntaxe: Input(číslo, [#]číslo souboru)

číslo Jakýkoli platný číselný výraz určující počet znaků, kterémají být načteny.

číslo souboru Jakékoli platné číslo souboru.

Tuto funkci používejte pouze se soubory otevřenými ve Vstupním ne−bo Binárním režimu.

InStr Vrací pozici opakování jednoho řetězce v jiném.

Syntaxe: InStr([začátek, ]řetězec1, řetězec2[, porovnávání])

začátek Číselný výraz, který určí, od kterého místa se začne hle−dat. Je−li vynechán, hledá se od prvního místa.

řetězec1 Řetězcový výraz který bude prohledáván.

řetězec2 Hledaný řetězcový výraz.

porovnávání Určí typ řetězcového porovnávání.

Int Vrací celou část čísla. Syntaxe: Int(číslo)

Je−li číslo záporné, vrací funkce Int nejbližší nižší nebo rovné celé zá−porné číslo. Například Int převede číslo −8.4 na −9.

IsArray Vrací hodnotu typu Boolean v závislosti na tom, je−li proměnná typupole. Syntaxe: IsArray(název proměnné)

IsDate Vrací hodnotu typu Boolean v závislosti na tom, je−li výraz převodi−telný na datum. Syntaxe: IsDate(výraz)

IsEmpty Vrací hodnotu typu Boolean v závislosti na tom, byla−li proměnná ini−cializována. Syntaxe: IsEmpty(výraz)

IsError Vrací hodnotu typu Boolean v závislosti na tom, je−li výraz chybovouhodnotou. Syntaxe: IsError(výraz)

Argumentem výraz musí být typ Variant nebo VarType vbError.

IsMissing Vrací hodnotu typu Boolean v závislosti na tom, byl−li volitelný argu−ment předán proceduře. Syntaxe: IsMissing(jméno argumentu)

IsNull Vrací hodnotu typu Boolean v závislosti na tom, neobsahuje−li výrazžádné platné údaje (hodnota Null). Syntaxe: IsNull(výraz)

IsNumeric Vrací hodnotu typu Boolean v závislosti na tom, může−li být výraz vy−hodnocen jako číslo. Syntaxe: IsNumeric(výraz)

IsObject Vrací hodnotu typu Boolean v závislosti na tom, odkazuje−li výraz naplatný objekt automatizace OLE. Syntaxe: IsObject(výraz)

LBound Vrací nejmenší index, který je pro udaný rozměr pole k dispozici.

Syntaxe: LBound(arrayname[, dimension])

Příklad:Dim Pole(1 To 100, 0 To 3, -3 To 4)

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

143

Příkaz Vrácená hodnota

LBound(Pole, 1) 1

LBound(Pole, 2) 0

LBound(Pole, 3) -3

LCase Vrací řetězec zkonvertovaný na malá písmena.

Syntaxe: LCase(řetězec)

Left Vrací zadaný počet znaků z levé strany řetězce.

Syntaxe: Left(řetězec, délka)

Len Vrací délku řetězce nebo počet bajtů potřebný k uschování proměnné.

Syntaxe: Len(řetězec | jméno_prom.)

Funkce Len nemůže určit počet bajtů potřebných k uschování pro−měnné u uživatelsky definovaných typů dat.

LoadPicture Natáhne rastrový obrázek do jednoho z těchto objektů: Form, Pictu−reBox, Image. Př.:

Picture1.Picture = LoadPicture(“PARTY.BMP“)

LoadResData Natáhne data ze souboru zdrojů (přípona souboru res).

Syntaxe: LoadResData(index, format)

LoadResPicture Natáhne obrázek ze souboru zdrojů (přípona souboru res).

Syntaxe: LoadResPicture(index, format)

Loc Vrátí aktivní pozici pro čtení/zápis v otevřeného souboru.

Syntaxe: Loc(číslo souboru)

Vrácená hodnota závisí i na režimu, ve kterém je soubor otevřen:

Náhodný režim – funkce vrátí číslo posledního záznamu, který bylčten nebo zapsán do souboru.

Sekvenční – funkce vrátí aktuální pozici bajtu v souboru děleno 128.

Binární – funkce vrátí polohu bajtu, ve kterém bylo naposledy prová−děno čtení nebo zápis.

LOF Vrátí velikost souboru v bajtech, otevřeného příkazem Open.

Syntaxe: LOF(číslo souboru)

Log Vrací přirozený logaritmus argumentu. Syntaxe: Log(číslo)

Konstanta e (hodnota základu přirozeného logaritmu) je přibližně rov−na číslu 2,718282.

LTrim, RTrim. Trim

Vrací kopii řetězce s vypuštěním mezer na začátku (LTrim), na konci(RTrim), nebo na začátku i na konci (Trim). Syntaxe: LTrim(řetězec)

Trim(řetězec)

Trim(řetězec)

UČEBNICE VISUAL BASICU 6.0

144

Mid Vrací určitý počet znaků z řetězce.

Syntaxe: Mid(řetězec, začátek[, délka])

Není−li zadán parametr délka, vrací funkce znaky od pozice začátekdo konce řetězce.

Minute Vrací celé číslo od 0 do 59 včetně, které vyjadřuje určitou minutuv hodině. Syntaxe: Minute(čas)

Argument čas je číselný nebo řetězcový výraz, který se dá interpreto−vat jako časový údaj.

Month Vrací celé číslo od 1 do 12 včetně, které vyjadřuje pořadové číslo mě−síce v roce. Syntaxe: Month(datum)

Argument datum je číselný nebo řetězcový výraz, který se dá inter−pretovat jako datum.

MsgBox U této funkce se zastavme o něco déle, protože její použití je velmičasté. 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živatel definuje také jakátlačítka se mají zobrazit, které z nich bude předvoleno a která ikonabude zprávu graficky doplňovat.

Syntaxe funkce je následující:

MsgBox(prompt[, buttons][,title][, helpfile, context])

Popis argumentů:

prompt Řetězcový výraz zobrazený jako dialogová zpráva. Maxi−mální délka promptu je v závislá na šířce znaků písma,které je použito (cca 1024 znaků). Má−li prompt více nežjednu řádku, je možné jej rozdělit pomocí znaků konceodstavce (Chr(13)), přesunu na další řádek (Chr(10))nebo jejich kombinací (Chr(13) + Chr(10)) mezi všemiřádky.

buttons Číselný výraz sestávající ze součtů identifikačních číseltlačítek, které mají být zobrazeny, ikon a předvolenéhotlačítka (viz dále). Implicitní hodnota (pokud vynechátetuto volbu) je 0.

title Řetězcový výraz zobrazený v titulkovém pruhu dialogu.Pokud title vynecháte, je do titulkového pruhu vloženojméno aplikace.

helpfile Řetězcový výraz určující název souboru, který obsahujetext nápovědy k dialogu. 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 pojedné z následujících částí (zkušenější z Vás správně poznávají vztah

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

145

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é hodnoty, dálehodnota a popis:

1. část určuje tlačítka zobrazená v dialogu:

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:

vbCritical 16 Zobrazí ikonu kritické zprávy.

vbQuestion 32 Zobrazí ikonu varovného dotazu.

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í:

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:

vbApplicationModal 0 Aplikační režim – uživatel musí před po−kračováním další práce ve zvolené aplikaci odpovědět na zprávu.Hodnota 0 je implicitně předvolena. Pokud vynecháte zadání argu−mentu buttons, budou informační okna pracovat v tomto režimu.

vbSystemModal 4096 Systémový režim – všechny aplikace jsoupozastaveny, dokud uživatel neodpoví na zobrazenou zprávu.

A jaké hodnoty funkce MsgBox vrací? Vprvním sloupci je názevvrácené konstanty, ve druhém její číselná hodnota a v poslednímnázev tlačítka, které bylo stisknuto.

vbOK 1 OK

vbCancel 2 Storno

vbAbort 3 Zpět

vbRetry 4 Znovu

vbIgnore 5 Ignorovat

vbYes 6 Ano

vbNo 7 Ne

Now Funkce se volá bez argumentů a vrací aktuální systémové datuma čas.

Oct Vrací řetězec představující číslo v osmičkové soustavě.

UČEBNICE VISUAL BASICU 6.0

146

Syntaxe: Oct(číslo)

Čísla osmičkové soustavy lze používat přímo pomocí návěští&O. &O10 v osmičkové soustavě je 8 v desítkové soustavě.

Partition Funkci Partition můžete použít v mřížce návrhu dotazu, popřípaděv zobrazení SQL okna Dotaz. Funkce vrátí řetězec označující vypočte−nou oblast řady, do které spadá zadané číslo.

Syntaxe: Partition(number, start, stop, interval)

number Celé číslo, které je po vyhodnocení zařazeno do jednéz oblastí.

start Celočíselný počátek všech oblastí řady. Hodnota tohotoargumentu nemůže být záporná.

stop Celočíselný konec všech oblastí řady. Hodnota musí býtvyšší, než hodnota argumentu start.

interval Celočíselná hodnota, délka oblastí. Tento argument ne−může být menší než 1.

PV Vrací aktuální stav vkladového účtu při probíhajícím spoření založe−ném na pravidelných, stálých splátkách a konstantní úrokové sazbě.

QBColor Vrátí barevný kód RGB palety, odpovídající zadanému číslu barvy.

Syntaxe: QBColor(barva)

Platné hodnoty argumentu barva:

Číslo Barva Číslo Barva

0 černá 8 šedivá

1 modrá 9 světle modrá

2 zelená 10 světle zelená

3 azurová 11 světle azurová

4 červená 12 světle bílá

5 purpurová 13 světle purpurová

6 žlutá 14 světle žlutá

7 bílá 15 zářivě bílá

Rate Vrací hodnotu úrokové sazby vztaženou k úročenému období anuity.

RGB Vrací hodnotu reprezentující barvu RGB.

Syntaxe: RGB (red, green, blue)

red Číslo v rozsahu 0 až 255, včetně, určující červenou slož−ku barvy.

green Číslo v rozsahu 0 až 255, včetně, určující zelenou složkubarvy.

blue Číslo v rozsahu 0 až 255, včetně, určující modrou složkubarvy.

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

147

Seznam základních barev a příslušných hodnot pro systém RGB:

Barva Hodnota červené Hodnota zelené Hodnota modré

Černá 0 0 0

Modrá 0 0 255

Zelená 0 255 0

Tyrkysová 0 255 255

Červená 255 0 0

Fialová 255 0 255

Žlutá 255 255 0

Bílá 255 255 255

Right Vrací určitý počet znaků z pravé strany řetězce.

Syntaxe: Right(řetězec, délka)

Rnd Funkce Rnd vrací náhodnou hodnotu menší než 1 a větší nebo rov−nu 0. Syntaxe: Rnd[(číslo)].

Hodnota argumentu číslo určuje způsob, jakým funkce Rnd generujenáhodné číslo:

Pokud je hodnota parametru číslo:

• menší než 0, funkce Rnd generuje pokaždé stejné číslo, para−metr číslo je použit jako výchozí hodnota

• větší než 0 – další náhodné číslo posloupnosti

• rovna 0 – naposledy generované náhodné číslo

• nezadán – další náhodné číslo posloupnosti.

Second Vrací celé číslo od 0 do 59 včetně, které představuje určitou sekunduv minutě. Syntaxe: Second(čas). Argument čas je číselný nebo řetěz−cový výraz, který se dá interpretovat jako časový údaj.

Seek Vrací aktuální pozici pro čtení/zápis v souboru otevřeném příkazemOpen.

Syntaxe: Seek(číslo souboru)

Sgn Vrací celé číslo (1, 0 či −1), které signalizuje znaménko čísla zadanéhojako argument. Syntaxe: Sgn(číslo).

Shell Slouží ke spuštění programu. Syntaxe: Shell(jméno cesty[,typ okna])

Sin Vrací funkční hodnotu funkce sinus pro úhel určený zadaným argu−mentem. Syntaxe: Sin(úhel). Hodnota úhlu se zadává v radiánech.

SLN Vrací výši odpisu majetku pro jedno období při rovnoměrném odpiso−vání.

Space Vrací řetězec sestávající z daného počtu mezer.

Syntaxe: Space(počet)

UČEBNICE VISUAL BASICU 6.0

148

Spc Používá se s příkazem Print # nebo metodou Print k nastavení pozi−ce pro výstup. Syntaxe: Spc(n).

Proměnná n udává počet mezer, které budou vloženy před zobraze−ním nebo tiskem následujícího výrazu v seznamu.

Sqr Vrací druhou odmocninu z čísla. Syntaxe: Sqr(číslo)

Str Konvertuje zadané číslo na řetězec. Syntaxe: Str(číslo)

StrComp Vrací hodnotu výsledku řetězcového porovnávání.

Syntaxe: StrComp(řetězec1, řetězec2[, porovnávání])

Hodnota parametru porovnání určuje typ porovnávání obou řetězců.Např. hodnota 0 (základní) k provedení binárního porovnávání, hod−nota 1 k provedení textového porovnávání. Návratové hodnoty: Pokud je řetězec1 menší než řetězec2 funkce StrComp vrací −1.

Pokud je řetězec1 roven řetězec2 funkce StrComp vrací 0.

Pokud je řetězec1 větší než řetězec2 funkce StrComp vrací 1.

StrConv Provádí konverzi řetězce podle zadaného parametru konverze.

Syntaxe: StrConv(řetězec, konverze).

String Vrací řetězec zvolené délky složený ze zvoleného znaku.

Syntaxe: String(počet, znak).

Switch Vyhodnotí seznam výrazů a vrátí hodnotu (nebo výraz) sdruženous prvním výrazem v seznamu, jehož hodnota je True.

Syntaxe: Switch(výraz1, hodnota1[, výraz2, hodnota2 . . . [, výrazn, _hodnota−]])

SYD Vrací výši degresivních odpisů majetku za určité období.

Tab Tabelátor. Používá se s příkazem Print # nebo s metodou Print k ur−čení pozice pro výstup. Syntaxe: Tab[(n)].

Tan Vrací funkční hodnotu funkce tangens pro úhel určený zadaným argu−mentem (v radiánech). Syntaxe: Tan(úhel).

Time Funkce aktuální systémový čas.

Timer Vrací počet sekund, které uplynuly od půlnoci.

TimeSerial Vrací výraz obsahující čas, který vyjadřuje určitou hodinu, minutua sekundu zadané jako argumenty funkce.

Syntaxe: TimeSerial(hour, minute, second).

TimeValue Vrací výraz vyjadřující čas.

Syntaxe: TimeValue(čas), Př.: a = TimeValue(“2:24:08 PM“)

TypeName Vrací řetězec, který poskytuje informace o proměnné.

Syntaxe: TypeName(jméno_proměnné).

UBound Vrací největší dostupný index pro stanovený rozměr určitého pole.

Syntaxe: UBound(arrayname[, dimension]).

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

149

Popis argumentů viz LBound.

UCase Vrací řetězec, který je konvertován na velká písmena.

Syntaxe: UCase(řetězec).

Va Vrací čísla obsažená v řetězci. Syntaxe: Val(řetězec).

VarType Vrací hodnotu, která určuje podtyp proměnné.

Syntaxe: VarType(jméno_proměnné).

Návratové hodnoty funkce:

Konstanta Hodnota Popis typu proměnné

vbEmpty 0 Empty (neinicializováno)

vbNull 1 Null (žádné platné údaje)

vbInteger 2 celé číslo

vbLong 3 dlouhé celé číslo

vbSingle 4 reálné číslo s jednoduchou přesností

vbDouble 5 reálné číslo s dvojnásobnou přesností

vbCurrency 6 měna

vbDate 7 datum

vbString 8 řetězec

vbObject 9 objekt automatizace OLE

vbError 10 chyba

vbBoolean 11 pravdivostní hodnota

vbVariant 12 typ Variant (pouze u polí typu Variant)

vbDataObject 13 objekt nepodporující automatizaciOLE

vbByte 17 bajt

vbArray 8192 pole

Weekday Vrací celé číslo, které vyjadřuje pořadové číslo dne v týdnu.

Syntaxe: Weekday(date, [firstdayofweek]).

Year Vrací celé číslo, které reprezentuje rok zadaný v argumentu datum.Syntaxe: Year(datum).

UČEBNICE VISUAL BASICU 6.0

150

Příkazy

AppActivate Aktivuje aplikační okno s titulkem title.

Syntaxe: AppActivate title[, wait]

title je řetězcový výraz v titulkovém pruhu aplikačního okna

wait je logická proměnná, která určuje, je−li aplikace při volá−ní vybrána nebo nikoli.

Beep Aktivuje tón z reproduktoru počítače. Frekvence a délka tónu závisína hardware a systémovém software a nedá se programovými pro−středky Visual Basicu nastavit.

Call Volání jiné procedury. Předává řízení proceduře Sub, proceduřeFunction nebo proceduře v dynamické knihovně (DLL).

Syntaxe: [Call] jméno [seznam parametrů]

Používání klíčového slova Call při volání procedur je nepovinné.

ChDir Změní aktuální adresář nebo složku.

Syntaxe: ChDir cesta.

Je povolena i tečková notace: př.: ChDir “..“

ChDrive Změní aktuální disk. Syntaxe: ChDrive disk.

Close Zavře soubor daného čísla (nebo i více souborů, zadáte−li více číselsouborů) a tím znemožní vstup/výstup do tohoto souboru.

Syntaxe: Close [seznam čísel souborů].

Const Deklaruje konstanty, které se používají namísto literálů.

Syntaxe: [Public | Private] Const konstjmeno [As type] = výraz.

Date Nastaví aktuální systémové datum. Syntaxe: Date = datum.

Př.: Date = #February 19, 1997#

Declare Používá se na úrovni modulu k deklarování odkazů na externí proce−dury v dynamické knihovně (DLL). Syntaxe je popsána v kapitolepojednávající o dynamických knihovnách DDL.

DefType Soubor příkazů, které se používají se na úrovni modulu k nastavenívýchozího datového typu proměnných, argumentů předávaných pro−cedurám a k nastavení vraceného typu u procedur Function a Pro−perty Get, jejichž názvy začínají zadanými znaky.

Př.: Názvy proměnných začínajících písmenem B až D jsou implicitnětypu Integer.

DefInt B−D

DeleteSetting Vymazání oddílu nebo hodnoty klíče ze záznamu v registru programuWindows.

Syntaxe: DeleteSetting(appname, section[, key]).

Dim Deklaruje proměnné a přiděluje potřebnou paměť. Syntaxe a použitíjsou popsány v kapitole o deklaraci proměnných. Klíčové slovo Dim

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

151

se používá také ve spojitosti s klíčovým slovem New při deklaraci ob−jektové proměnné jako nové instanci objektu jazyka Visual Basic neboobjektu OLE.

Do...Loop Příkaz cyklu – opakuje blok příkazů, dokud nabývá podmínka hodno−ty True (ve spoje ní s While) nebo dokud podmínka nenabyde hod−noty True (ve spojení s Until).

Syntaxe:

Do [{While | Until} podmínka]

[příkazy]

[Exit Do]

[příkazy]

Loop

Jiná platná syntaxe:

Do

[příkazy]

[Exit Do]

[příkazy]

Loop [{While | Until} condition]

End Ukončuje proceduru nebo blok. Používá se ve spojení s klíčovým slo−vem, které specifikuje ukončovanou strukturu Visual Basicu.

Syntaxe: End

End Function

End If

End Property

End Select

End Sub

End Type

End With

Erase Provede novou inicializaci prvků polí s pevnou velikostí a uvolní pa−měť přidělenou dynamickým polím. Syntaxe: Erase arraylist.

Argument arraylist je jedna nebo více proměnných polí, které jsouvzájemně odděleny čárkou a které je třeba inicializovat.

Error Simuluje výskyt chyby.

Syntaxe: Error číslo_chyby.

Exit Slouží k opuštění bloku kódu, který představuje tělo příkazu Do...Loop, For...Next, Function, Sub nebo Property.

Syntaxe: Exit Do

UČEBNICE VISUAL BASICU 6.0

152

Exit For

Exit Function

Exit Property

Exit Sub

FileCopy Zkopíruje soubor. Syntaxe: FileCopy zdrojový_soubor, kopie

For Each...Next Provede skupinu příkazů pro každý prvek pole nebo kolekce.

Syntaxe: For Each prvek In skupina

[příkazy]

[Exit For]

[příkazy]

Next [prvek]

prvek je proměnná, která určuje prvky kolekce nebo pole,

Skupina jméno kolekce nebo pole.

For...Next Zpracuje skupinu příkazů tolikrát, kolikrát je parametrem příkazu určeno.Syntaxe: For počítadlo = začátek To konec [Step krok]

[příkazy]

[Exit For]

[příkazy]

Next [počítadlo]

Notoricky známá konstrukce je ve Visual Basicu obohacena o mož−nost předčasného ukončení cyklu příkazem Exit.

Function Deklaruje název, argumenty a kód, který tvoří tělo procedury Function.

Syntaxe je popsána v kapitole o deklaraci procedur.

Get Načítá data z otevřeného diskového souboru disku do proměnné.

Syntaxe: Get [#]číslo_souboru, [číslo_záznamu], jméno_proměnné

Pokud není použito číslo_záznamu, je načten následující záznam ne−bo bajt. Zápis však musí obsahovat oddělující čárky, například:

Get #4,,strZnak

GoSub...Return Slouží ke skoku do podprogramu uvnitř procedury a návratu z něj.Syntaxe: GoSub řádek

. . .

řádek

. . .

Return.

Parametrem řádek může být libovolné návěští řádku nebo číslo řádku.

GoTo Nepodmíněný skok na určitý řádek procedury.

Syntaxe: GoTo řádek

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

153

Parametrem řádek může být libovolné návěští řádku nebo číslo řádku.

If...Then...Else provádí podmíněné zpracování skupiny příkazů v zá−vislosti na pravdivostní hodnotě podmínky. Pokud má podmínka ne−nulovou hodnotu nebo hodnotu True, bude proveden následujícíblok příkazů.

Syntaxe: If podmínka Then příkazy [Else jiné příkazy]

Konstrukci lze použít v širším tvaru:

If podmínka Then

[příkazy]

[ElseIf podmínka Then

[jiné_příkazy]] . . .

[Else

[jiné_příkazy]]

End If

Input Načte data z otevřeného souboru a přiřadí je proměnným.

Syntaxe: Input #číslo souboru, seznam proměnných.

Kill Maže soubory z disku. Syntaxe: Kill cesta_a_jméno.

Let Přiřadí proměnné nebo vlastnosti hodnotu nějakého výrazu.

Syntaxe: [Let] proměnná = výraz.

Používání tohoto klíčového slova je nepovinné.

Line Input Načte řádek z otevřeného sekvenčního souboru a přiřadí ho řetězcovéproměnné.

Syntaxe: Line Input #číslo_souboru, jméno_proměnné

Lock Nastavuje uzamčení pro specifikované záznamy souboru otevřenéhopříkazem Open.

Syntaxe: Lock [#]číslo souboru[, rozsah záznamů].

LSet Řetězec v proměnné zarovná zleva nebo překopíruje proměnnouz jednoho uživatelského typu do jiného uživatelského typu.

Syntaxe: LSet prom_řetězce = řetězec

LSet jméno_prom1 = jméno_prom2

prom_řetězce Jméno řetězcové proměnné.

řetězec Řetězcový výraz který bude v prom_řetězce zarovnánzleva.

jméno_prom1 Jméno uživatelsky definované proměnné, která budekopírováná do jiné.

jméno_prom2 Jméno uživatelsky definované proměnné, do níž sebude kopírovat.

UČEBNICE VISUAL BASICU 6.0

154

Mid Přepíše určitý počet znaků v řetězci jiným zadaným řetězcem nebo je−ho částí. Syntaxe: Mid(řetězec1, začátek[, délka]) = řetězec2.

řetězec1 Jméno proměnné, v níž je upravovaný řetězec.

začátek Umístění znaku v prom_řetězce, kde se začne s přepiso−váním textu.

délka Počet znaků, které se budou přepisovat. Je−li tento argu−ment vynechán, je použit celý řetězec2.

řetězec2 Řetězcový výraz který bude vložen do prom_řetězce.

Po provedení operace je délka řetězce1 stejná nebo menší než předpoužitím příkazu Mid. Pokud je řetězec2 delší, jeho zbylé znaky sebudou ignorovat.

MkDir Vytvoří nový adresář nebo složku. Syntaxe: MkDir cesta

Name Přejmenuje nebo přesune soubor, adresář nebo složku.

Syntaxe: Name stará_cesta_a_ jméno As nová_cesta_a_jméno

On Error Zapíná rutinu pro obsluhu chyby a určuje pozici rutiny v proceduře;slouží rovněž k vypnutí rutiny pro obsluhu chyby.

Možné syntaxe: On Error GoTo řádek

On Error Resume Next

On Error GoTo 0

Detailní popis příkazu je uveden v kapitole o obsluze zachytitelnýchchyb.

On...GoSub, On...GoTo

Podmíněný skok programu na jeden nebo několik určených řádků.

Syntaxe: On výraz GoSub seznam cílů

On výraz GoTo seznam cílů

výraz je libovolný číselný výraz, který nabývá celočíselnéhodnoty z uzavřeného intervalu 0 až 255. Nenabývá−livýraz celočíselné hodnoty, je jeho hodnota před vy−hodnocením zaokrouhlena. Pokud je jeho hodnota mi−mo výše uvedený interval, vygeneruje se chyba. Pokudje hodnota výrazu 0, předá se řízení na příkaz následu−jící za příkazem Goto nebo Gosub. Jen při nenulovéhodnotě výrazu bude proveden skok určený sezna−mem cílů.

seznam cílů je seznam čísel řádků nebo návěští řádků oddělenýchčárkami.

Open Umožní vstupní/výstupní operace ze/do souboru.

Syntaxe: Open cesta_a_jméno [For režim][Access přístup] [zamknout]_

As [#]číslo souboru [Len=délka záznamu]

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

155

cesta_a_jméno Řetězcový výraz určující jméno souboru může za−hrnovat adresář nebo složku, a disk.

režim Klíčové slovo určující typ přístupu k souboru:Append (přidání k souboru), Binary, Input(vstup), Output (výstup) nebo Random (náhod−ny přístup).

přístup Klíčové slovo určující povolené operace s otevře−ným souborem: Read, Write nebo Read Write.

zamknout Klíčové slovo určující povolené operace s otevře−ným souborem prováděné jinými metodami: Sha−red, Lock Read, Lock Write, and Lock ReadWrite.

číslo souboru Platné číslo souboru v rozsahu od 1 do 511. Lzepoužít funkci FreeFile ke zjištění dalšího použi−telného čísla souboru.

délka záznamu Číslo menší než nebo rovné 32 767 (počet bajtů).Pro soubory otevřené pro přímý přístup je jehohodnota rovna délce záznamu. Pro ostatní sou−bory představuje tato hodnota počet znaků ve vy−rovnávací paměti.

Option Base Příkazem se na úrovni modulu deklaruje výchozí mez dolních indexůpole.

Syntaxe: Option Base {0 | 1}

Option Compare

Používá se na úrovni modulu k deklarování výchozí porovnávací me−tody, která se používá při porovnávání řetězcových dat.

Syntaxe: Option Compare {Binary | Text | Database}

Příkaz Option Compare Binary má za následek porovnání na zákla−dě pořadí řazení, které vychází z interního binárního tvaru znaků.Option Compare Text porovnává řetězce bez rozlišení malých a vel−kých písmen.

Option Explicit Používá se na úrovni modulu k vynucení explicitní deklarace všechproměnných v tomto modulu.

Syntaxe: Option Explicit.

Option Private Module

Příkazem se na úrovni modulu určí, že celý modul má být soukromý.

Syntaxe: Option Private Module.

Print # Zapíše data upravená pro zobrazení do sekvenčníhosouboru.

Syntaxe: Print #číslo souboru, [seznam výstupu].

UČEBNICE VISUAL BASICU 6.0

156

Private Používá se na úrovni modulu k deklarování soukromých proměnnýcha přidělování paměti.

Syntaxe: Private varname [([ subscripts ])][ As [ New ] type][, varna−me_[([subscripts])][As [New] type]] . . .

varname Název proměnné.

subscripts Rozměry proměnné pole. Je dovoleno deklarovat až 60−tirozměrné pole. Argument subscripts používá následujícísyntaxi:

[lower To] upper [,[lower To] upper] . . .

Není−li explicitně uvedeno v argumentu lower, je dolní mez pole říze−na příkazem Option Base. Nevyskytuje−li se příkaz Option Basev programu, bude mít dolní mez nulovou hodnotu.

New Klíčové slovo, které udává, že deklarovaná proměnnáobjektu je nová instance objektu v programu Visual Basicnebo objektu OLE, který je možné vytvořit externě.

type Datový typ proměnné. Datové typy jsou Byte, Boolean,Integer, Long, Currency, Single, Double, Date, String(pro řetězce proměnné délky), String length (pro řetěz−ce pevné délky), Object, Variant, uživatelský typ, neboobjektový typ. Pro každou definovanou proměnnou jetřeba použít samostatnou klauzuli As type.

Property Get Příkazem se deklaruje název, argumenty a kód tvořící tělo proceduryProperty, která vrací hodnotu vlastnosti.

Syntaxe: [Public|Private][Static]Property Get name [(arglist)][As type]

[statements]

[name = expression]

[Exit Property]

[statements]

[name = expression]

End Property

Property Let Deklaruje název, argumenty a kód, které tvoří tělo procedury Proper−ty Let. Procedura přiřazuje hodnotu nějaké vlastnosti.

Syntaxe: [Public|Private][Static] Property Let name [(arglist)]

[statements]

[Exit Property]

[statements]

End Property

Property Set Deklaruje název, argumenty a kód, které tvoří tělo procedury Proper−ty, která nastavuje odkaz na objekt.

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

157

Syntaxe: [Public | Private][Static] Property Set name [(arglist)]

[statements]

[Exit Property]

[statements]

End Property

Public Používá se na úrovni modulu k deklarování veřejných proměnnýcha k přidělení paměti.

Put Načte data z proměnné do souboru na disku.

Syntaxe: Put [#]číslo_souboru, [číslo_záznamu], jméno_proměnné

číslo_souboru Jakékoli platné číslo souboru.

číslo_ záznamu Číslo záznamu (soubory s náhodným přístupem)nebo číslo bajtu (soubory v binárním režimu), nakterém začne zápis.

jméno_proměnné Jméno proměnné, která obsahuje data pro zápis nadisk.

Randomize Spouští generátor náhodných čísel.

Syntaxe: Randomize [číslo]

Příkaz Randomize používá argument číslo pro inicializaci generátorunáhodných čísel funkce Rnd.

ReDim Používá se na úrovni procedury k deklarování proměnných dynamic−kého pole a k přidělování paměti.

Př.: Dim Pole() As Integer ‘ Deklarace dynamického pole.

ReDim Pole(10) ‘ Přidělení 10−ti prvků.

Rem Příkaz uvozuje vysvětlující komentář. Kompilátor ignoruje zbytek řád−ku začínajícího klíčovým slovem Rem.

Reset Příkaz Reset zavře všechny aktivní soubory otevřené příkazem Opena zapíše obsahy všech vyrovnávacích pamětí souborů na disk.

Resume Obnovuje výpočet po ukončení obsluhy chyby.

Syntaxe:

Resume [0] Vrátí řízení příkazu, který právě ošetřenou chybu vyvolal.

Resume Next Odevzdá řízení příkazu bezprostředně následujícímuza příkazem, který chybu vygeneroval.

Resume řádek Výpočet pokračuje řádkem určeným parametrem řá−dek, kde řádek je buď návěští řádku nebo číslo řádku.

Return Používá se ve spojení s příkazem GoSub. Vrátí řízení z podprogramuprocedury zpět na příkaz bezprostředně následující za příkazemGoSub, který provedl skok do podprogramu.

RmDir Smaže existující adresář nebo složku.

Syntaxe: RmDir cesta

UČEBNICE VISUAL BASICU 6.0

158

RSet Zarovná znaky v řetězci doprava. Je−li zarovnávaný řetězec kratší nežpůvodní, bude zleva nahrazen mezerami.

Syntaxe: RSet prom_řetězce = řetězec

SaveSetting Uloží nebo vytvoří záznam aplikace v registru programu Windows.

Syntaxe: SaveSetting(appname, section, key, setting)

appname výraz typu String, který obsahuje název aplikace neboprojektu, kterého se nastavení týká.

section výraz typu String, který obsahuje název oddílu, kam ma−jí být klíče uloženy.

key výraz typu String, který obsahuje název klíče, který má býtuložen.

setting výraz, který obsahuje hodnotu, která má být přiřazenaklíči určenému parametrem key.

Seek Nastaví místo pro čtení nebo zápis v souboru otevřeného příkazemOpen. Syntaxe: Seek [#]číslo souboru, pozice

Select Zpracuje jednu z několika skupin příkazů v závislosti na hodnotě výrazu.

Syntaxe: Select Case test

[Case seznam výrazů−n

[příkazy −n]] . . .

[Case Else

[jiné příkazy ]]

End Select

Parametrem test může být jakýkoli číselný nebo řetězcový výraz.

SendKeys Zasílá jedno nebo více stisknutí kláves do aktivního okna, jako kdybybyly stisknuty na klávesnici.

Syntaxe: SendKeys string[, wait]

Argument string je řetězcový výraz specifikující, které klávesové úho−zy se mají odeslat. Přehled kódů některých kláves:

Klávesa Kód

BACKSPACE {BACKSPACE}, {BS} nebo {BKSP}

BREAK {BREAK}

CAPS LOCK {CAPSLOCK}

DEL {DELETE} nebo {DEL}

END {END}

ENTER {ENTER}

ENTER {~}

ESC {ESC}

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

159

HOME {HOME}

INS {INSERT}

NUM LOCK {NUMLOCK}

PAGE DOWN {PGDN}

PAGE UP {PGUP}

PRINT SCREEN {PRTSC}

SCROLL LOCK {SCROLLLOCK}

ŠIPKA DOLŮ {DOWN}

ŠIPKA NAHORU {UP}

ŠIPKA VLEVO {LEFT}

ŠIPKA VPRAVO {RIGHT}

TAB {TAB}

F {F1}

Ostatní klávesy (čísla a písmena) se do řetězce zapisují bez další iden−tifikace.

Pro určení klávesových příkazů spojených s nějakou z kláves SHIFT,CTRL a ALT, napište před kód klávesy jeden z těchto znaků:

Klávesa Kód

SHIFT +

CTRL ^

ALT %

Následující příklad demonstruje použití programu Kalkulačka (vestavě−ného do operačního systému Windows) použitím příkazu SendKeys:

ReturnValue = Shell(“CALC.EXE“, 1) ‘ Spustí program Kalkulačka.

AppActivate ReturnValue ‘ Aktivuje program Kalkulačka.

For int = 200 To 1000 ‘ Nastaví smyčku pro výpočet součtu.

SendKeys int & “{+}“, True ‘ Odesílá programu Kalkulačkastisky kláves

Next int

SendKeys “=“, True ‘ Vytvoří celkový součet.

SendKeys “%{F4}“, True ‘ Odesláním ALT+F4 uzavře program

Set Přiřadí proměnné nebo vlastnosti odkaz na objekt. Syntaxe je ukázánana příkladech dříve v této učebnici.

SetAttr Nastaví atributy souboru.

Syntaxe: SetAttr cesta, atributy

Možnosti nastavení proměnné atributy jsou:

UČEBNICE VISUAL BASICU 6.0

160

Konstanta Hodnota Popis

vbNormal 0 Normální (výchozí).

vbReadOnly 1 Pouze pro čtení.

vbHidden 2 Skrytý.

VbSystem 4 Systémový soubor.

VbArchive 32 Soubor byl od posledního zálohovánípozměněn.

Soubor, u kterého chcete nastavit atributy, nesmí být otevřen.

Static Používá se na úrovni procedury k deklarování proměnných a přidělo−vání paměti. Proměnné deklarované příkazem Static si uchovávajísvou hodnotu po celou dobu běhu kódu. Popsáno v knize.

Stop Přerušuje výpočet. Používá se např. při ladění procedur.

Sub Deklaruje název, argumenty a kód, které tvoří tělo procedury Sub.Syntaxe a použití popsáno v knize.

Time Nastaví systémový čas.

Syntaxe: Time = čas

Type Používá se na úrovni modulu k definici uživatelského datového typuobsahujícího jeden nebo více prvků.

Unlock, Lock Ovládání přístupu – odemknutí, resp. uzamčení – k souboruotevřenému příkazem Open.

Syntaxe: Unlock [#]číslo souboru[, rozsah záznamů]

While...Wend Provádí skupinu příkazů tak dlouho, dokud zadaná podmínka nabýváhodnoty True.

Syntaxe: While podmínka

[příkazy]

Wend

Width # Přiřadí šířku výstupnímu řádku (počet znaků na řádek např. při tisku)souboru otevřenému příkazem Open.

Syntaxe: Width #číslo souboru, šířka

With Provede na jednom objektu nebo uživatelském datovém typu skupinuoperací určených příkazy.

Syntaxe: With objekt

[příkazy]

End With

Write # Zapíše data do souboru.

Syntaxe: Write #číslo souboru, [seznam_výstupů]

seznam_výstupů reprezentuje jeden nebo více čárkami oddělených, čísel−ných nebo řetězcových výrazů určené k zápisu na disk.

PŘEHLED KLÍČOVÝCH SLOV VISUAL BASIC FOR APPLICATION

161

A

argument buttons, 16mode, 61

C

Clear, 118CommonDialog, 110Connect, 91

Č

číselné datové typy, 31

D

DAO, 69DatabaseName, 91databázový ovladač, 71DataField, 92DataSource, 92datový typ Boolean, 32

Object, 32DefaultType, 91deklarace konstant, 35

proměnných, 25WITH OWNERACCESS OPTION, 80

deklarační sekce modulu, 26Description, 118dialog pro tvorbu Menu, 93direktivy překladače, 137DLL knihovna, 131DSN−less, 90

E

Error, 113

F

formulář, 13fráze CONSTRAINT, 84

GROUP BY, 79HAVING, 79ORDER BY, 79WHERE, 78

funkce, 137Asc, 57CStr, 57Format, 57Chr, 57IsMissing, 24IsNumeric, 30LSet, 56MsgBox, 15pro porovnávání řetězců, 55RSet, 56Str, 58Val, 58

H

HelpContext, 118HelpFile, 118hodnota False, 117

Null, 30True, 117

CH

chyby, 113

I

Index, 99instalace tiskárny, 108

163

RReejjssttřřííkk

K

klauzule ClearFormatting, 67IN, 78

klíčové slovo, 21, 137Optional, 24

kód Visual Basicu, 15kódy chyb, 114kolekce Printers, 108Kontextové menu, 95kontrola pravopisu, 65

L

ladění programového kódu, 119ladicí okno, 123LastDLLError, 118

M

MDI formuláře, 127MDIForm, 127Menu, 93metoda RemoveItem, 47metody, 3Minimum Width, 99mřížka, 12

N

nabídka, 7nahrazování textu, 66nástrojová lišta, 7návratové hodnoty funkce, 150Number, 118

O

ODBC, 69odkaz, 21okno projektu, 8, 134

vlastností projektu, 134On Error GoTo 0, 116On Error Resume Next, 116operace INNER JOIN, 81

LEFT JOIN a RIGHT JOIN, 81UNION, 81

ovládací prvek CommandButton, 39CommonDialog, 110

Data, 90ImageList, 102ListBox, 39TextBox, 39

ovládací prvky, 3ovládání tiskáren, 107

P

panel ovládacích prvků, 7parametr KeyCode, 46

Shift, 47platnost proměnných, 28podřetězec, 49pokročilá práce s řetězci, 55pole, 33predikáty ALL, DISTINCT, DISTINCTROW,

TOP, 82procedura main(), 75programování, 11programové moduly, 19programový kód, 119proměnná frm, 72

typu Variant, 30prostředí Visual Basicu, 5příkaz ALTER TABLE, 83

CREATE INDEX, 84CREATE TABLE, 83DELETE, 85DROP, 85Exit Sub, 51, 116On Error, 116PARAMETERS, 83Resume, 117SELECT, 77TRANSFORM, 82UPDATE, 85

příkazy, 151přístup k datům, 69

R

Raise, 118ReadOnly, 91RecordsetType, 91RecordSource, 91

UČEBNICE VISUAL BASICU 6.0

164

Ř

řetězcové proměnné, 31

S

SELECT...INTO, 80seznam argumentů, 21Source, 118SQL dotaz, 77

aplikace, 86StatusBar, 97Style, 99System DSN, 70

T

tělo, 15Text, 99textové soubory, 61textový řetězec, 44, 49tisk, 107

U

událost Error, 113LostFocus, 45

události, 3událostní procedura, 13user friendly aplikace, 104uživatelem definované typy, 32

V

veřejné procedury, 25vlastnosti, 3volání okna, 15vytváření názvů, 29

W

Word, 65

Z

záznam (Record), 64

REJSTŘÍK

165

DDooppoorruuččeennáá lliitteerraattuurraa::1. Microsoft Visual Basic 6.0, příručka programátora,

Microsoft Press, 852 stran, [K0221]2. Microsoft Visual InterDev 6.0 Příručka programátora,

Microsoft Press, Microsoft Press, 488 stran, [K0241]3. Microsoft Visual Basic 6.O Professional Krok za krokem,

Michael Halvorson, 588 stran + CD, Microsoft Press, [K0229]4. Mistrovství ve Visual Basicu 6.0,

The Mandelbrot Set, Microsoft Press, 834 stran + CD, [K0264]


Recommended