29.1 Používání systémové schránky
29.2 Form Unload
29.3 Hledání Chyb a odlaďování programů
29.4 Jak na chyby pomocí objektu Debug
29.5 GoSub … Return
29.6 Domácí úkol
29.7 V další lekci
29.1 Používání systémové schránky
Ukážeme si, jak používat systémovou schránku. Budeme potřebovat objekt clipboard. A následující kód bude vypadat takto:
Private Sub Command1_Click()
Clipboard.SetText Text1.SelText
End Sub
Private Sub Command2_Click()
Print Clipboard.GetText
End Sub
Jelikož už jste došli až sem, nemusím snad vysvětlovat úplně vše. Jen to, že první příkaz slouží k vložení dat do schránky a druhý k jejich vybrání, tedy spíše použití. Schránku mažeme takto:
Private Sub Command3_Click()
Clipboard.Clear
End Sub
To by bylo to, co jsem vám chtěl nabídnout o schránce.
29.2 Form Unload
Tohle je elegantnější a čistší metoda ukončení programů než End, proto ji vřele doporučuji používat. Formulář se s použitím tohoto výrazu vymaže z paměti.
29.3 Hledání Chyb a odlaďování programů
Především bych se chtěl všem účastníkům kurzu omluvit, že s takto důležitou věcí přicházím tak pozdě. Ale teď je čas to napravit, tak doufám, že to napravím i s úroky. Oprava, hledání chyb ani krokování programu není žádná věda, jen to chce vědět, jak na to. A to byste se měli dozvědět právě tady.
Oprava nebo spíše schopnost opravovat a odhalovat chyby je spíše záležitostí tréninku nebo znalosti jazyka samotného a jeho syntaxe. Přesto je důležité znát základní principy hledání chyb. Proto se podíváme na první způsob,jak toho dosáhnout. Je to velmi účinné krokování programu. Dovoluje nám prohlédnout si v jednotlivých krocích obsahy proměnných, stavy různých komponent a podobně. Tento způsob je nejběžnější. A jak na něj? Určitě jste si všimli že před každým řádkem kódu je taková šedá plocha a pokud na ni kliknete, tak se vám celý řádek označí tmavou červenou. Pokud je řádek takto označen a spustíte program, program přes něj nepřejde ale zastaví se na něm a vy si můžete prohlédnout zdrojový kód. Tím že podržíte kurzor nad nějakou proměnou se zobrazí její hodnota. Takto můžete označit takovou část kódu jakou potřebujete a postupně ji krokovat. Pokud se vám průběh programu zastaví u vámi označeného řádku (breakpointu) a vy chcete pokračovat dál, stiskněte tlačítko, kterým program spouštíte.
Další možností, jak zjistit hodnoty proměnných, je okno Watch Window. Toto okno si zobrazíte přes menu View a vněm si vyberete Watch Window. Pokud kliknete do nového okna pravým tlačítkem, zobrazí se vám pop-up menu, v něm vyberete „Add watch…“. Zobrazí se vám dialogové okno, ve kterém si vyberete proceduru a proměnnou, kterou chcete sledovat a typ jejího sledování. Ale my se tomuto oknu zatím věnovat nebudeme. My si proměnou do tohoto okna přidáme tak, že ji označíme myší a přetáhneme do okna Watch Window. Nyní na vybranou sledovanou proměnou klikneme pravým tlačítkem, objeví se nám pop-up menu, na něm si vybereme, kdy chceme proměnné sledovat. Ve spodní části jsou tři OptionButtony. Zde si můžete vybrat, kdy se má ona proměnná zvýraznit. Takže si to vyzkoušejte.
Pak je zde možnost krokovat kód aniž byste museli všechno označovat, jak se u nás říká - knedlíkama (ty červené tečky). Tuto možnost nejdete v menu Debug pod názvem Step into. Nebo stisknutím F8. Tak, teď byste měli znát základní principy opravy chyb. Už to chce jen trénovat a sbírat zkušenosti. S každou nalezenou chybou pro vás bude jednoduší najít tu další. Tak se můžete těšit třeba na půlhodinové hledání chybičky, které není nijak výjimečné.
Snad jen dodat, že se říká: "Nelze udělat program bez chyby a při opravě chyby do programu minimálně další jednu zaneseme.". Samozřejmě to není stoprocentní, ale většinou to tak je.
29.4 Jak na chyby pomocí objektu Debug
První možností jak tento objekt využít, je tisknout si pomocí něj hodnoty proměnných do okna Immediate a tím můžete jednoduše hledat chyby v obsahu proměnných. Příkaz potom vypadá takto:
Debug.Print x
Nebo je tu druhá možnost a tou je podmíněné přerušení programu. Pokud je podmínka splněna, program pokračuje ve své činnosti, pokud podmínka splněna není, program se přeruší. Kód bude vypadat takto:
Debug.Assert x < 24
Podmínka za Debug.Assert může být samozřejmě libovolná. Věřím, že toto vám velmi usnadní práci při odchytávání chyb.
29.5 GoSub … Return
Používání GoSub a příkazů s podobnou funkcí se datuje od samých začátků programování. A pokud mě mé znalosti nešálí podobnou konstrukci nalezneme i v Assembleru. Část kódu v proceduře označenou návěstím. S návěstím jsem se setkali při ošetřování chyb, je to nějaký název zakončený dvojtečkou. Ale nebudu vám to tu suše vykládat a ukážu vám to na příkladu.
Private x As Long
Private Sub Form_Click()
GoSub Soucet 'Odešle nás na návěstí
Print x 'Vytisknutí "x" na formulář
Exit Sub 'Ukončení procedury
Soucet: 'Název návěstí
x = x + 3 'přičtení trojky
Return 'návrat na řádek pod GoSub Soucet
End Sub
Vím že tohle není zrovna vhodný příklad, ale bohatě postačí na to, abyste pochopili, jak to funguje. Tato konstrukce je dnes v jazyce Visual Basic využívána spíše výjimečně. Proto se jí nehodlám více zabývat. A pokud ji nebudete ovládat, nic závažného se nestane.
29.6 Domácí úkol
Co nějakou malou encyklopedii, která využívá formulářů MDI? Čím víc - tím líp. Zde už přecházím na hodnocení zpracování projektu jako takového, kód už by měl být poměrně kvalitní, proto jeho kontrole budu věnovat stále nižší pozornost. Ale jestli mi to spadne, tak to jednička nebude. Dosud jste tvořili relativně jednoduché programy, které nebyly příliš náchylné na vstupy uživatele. Teď se to začne pomalu měnit. A vy budete muset reagovat na více a více chyb a snažit se je buď odstranit nebo využít ve svůj prospěch. Možnost využití chyby v prospěch svůj je nádhernou záležitostí a dá se z ní mnoho vytěžit.
29.7 V další lekci
Tak tohle je pro několik lekcí poslední lekce tohoto typu, teď budou následovat lekce, ve kterých budou abecedně řazeny funkce, příkazy, klíčová slova a další. Tím by se vám, stejně jako s každou lekcí, měly otevřít nové možnosti. Každá lekce bude obsahovat mnoho záležitostí, se kterými jsme se doposud nesetkali a nemělo by jich být málo, ale na druhou stranu se v nich budou objevovat i věci již známe, ale co, opakování je matka moudrosti, ne?