předchozí lekce (1.40) | obsah kurzu | následující lekce (1.42) |
Předpokládejme, že požadujeme vytvořit program, ve kterém budeme chtít použít
proceduru, která vypíše do textového výstupního okna obsah několika zadaných
systémových proměnných. Vytvoříme si proto nejprve běžným způsobem projekt, ve kterém
vytvoříme hlavní program, ze kterého budeme volat proceduru umístěnou v externím
programu. V programu otevřeme databázi s ceníkem, provedeme skok na záznam
s náhodným číslem a umístíme informace o zboží do systémových proměnných:
Sub Main()
SysVarClear 'zruší systémové proměnné
If DbfUse("CENIK") then
'skok na náhodný záznam
DbfGo(Random(DbfRecCount))
'vytvoříme proměnné s hodnotami z databáze
Call SysVarSet("cislo", DbfReadStr("CISLO"))
Call SysVarSet("nazev", DbfReadStr("NAZEV"))
Call SysVarSet("typ" , DbfReadStr("TYP"))
Call SysVarSet("dodav", DbfReadStr("DODAV"))
Call SysVarSet("cena" , DbfReadNum("CENA"))
'v externím programu proměnné vypíšeme
Call Vypis
DbfUse("")
End If
End Sub
Dále si vytvoříme program, do kterého zapíšeme procedury a funkce, které budeme chtít
volat z hlavního programu. Vyberte proto volbu z menu Soubor/Nový a vyberte v záložce
'Program' ikonu s popisem 'Program BONANZA'. Vytvoří se prázdný program, který je
umístěn v editoru v samostatné záložce. Všimněte si, že se program umístí do Manažeru
projektu v jeho stromové struktuře obsahu projektu. Podrobněji se s projektem ale
seznámíme až v následující lekci. V nově vytvořeném programu zapíšeme požadované
procedury a funkce, které budeme chtít volat z nadřazeného programu. V našem
ukázkovém příkladě vytvoříme proceduru, která bude vypisovat obsah požadovaných
systémových proměnných. Volbou z menu Soubor/Uložit uložíme program na disk do
souboru, přičemž budete požádáni systémem o zadání jména nového programu.
Sub Vypis()
ConsoleClear
Writeln("CISLO:" + SysVarGet("cislo"))
Writeln("NAZEV:" + SysVarGet("nazev"))
Writeln("DODAV:" + SysVarGet("dodav"))
Writeln("TYP :" + SysVarGet("typ"))
Writeln("CENA :" + IntToStr(SysVarGet("cena")))
SysVarShow
End Sub
Nyní máme v projektu umístěny dva programy. V programu, který jsme vytvořili první
máme umístěno volání procedury, kterou jsme zapsali do druhého programu. Pokud máte
v projektu umístěno několik programů, bude spuštěn vždy ten, který jste vytvořili jako první.
Zkuste proto program spustit a zkontrolovat, zda pracuje vše podle našich předpokladů.
Pokud jste si vytvářeli program sami dle výše uvedeného popisu, zjistíte, že je nahlášena chyba, protože nebyla nalezena procedura VYPIS. To je ale v pořádku, protože jsme zatím nedefinovali v hlavním programu možnost použití externího programu, ve kterém je požadovaná procedura umístěna. To, že je program s procedurou umístěn v projektu neznamená, že bude automaticky použit. Přepněte se proto v editoru na hlavní program a zvolte z menu volbu Soubor/Definovat modul. Zobrazí se seznam programů umístěných v projektu, ze kterých můžete vybrat programy pro použití pomocí odkazů z hlavního programu. V našem případě by se měl zobrazit program, ve kterém je definována procedura VYPIS pro výpis obsahu zadaných systémových proměnných. Po odsouhlasení se uvede jméno externího modulu v hlavním programu jako sdíleného s hlavním programem.
Jména externích modulů se uvádějí vždy na začátku programu jako poznámka s textem
//USEUNIT s uvedením jména externího programu. Začátek programu bude proto nyní
obsahovat nový řádek:
'USEUNIT Sysvar_b
Pokud spustíte nyní program, proběhne již vše v pořádku. Protože nenalezl systém
proceduru VYPIS v hlavním programu, prohlédl si seznam nadefinovaných externích
programů a požadovanou proceduru nalezl. Uvedeným způsobem je možné doplnit do
vytvářené aplikace i další externí programy. V následující lekci se seznámíme s tím, že je
možné takto vytvářet i rozsáhlejší aplikace, které budou využívat procedury a funkce
definované v externích programech.
Pokud nejste zkušený uživatel, v žádném případě do definice externích modulů nezasahujte, ani neodstraňujte vámi neznámé automaticky zařazené moduly. Mohlo by dojít k chybné činnosti programu. Definici modulů musíte také ponechat na začátku programu.
Pokud jste zkušený uživatel systému, můžete zápis používaného externího programu doplnit do programu i přímo zápisem v editoru bez nutnosti použití výše uvedeného zadání pomocí dialogového boxu. Pokud si však nejste jisti se správností zápisu, zadávejte používané externí programy pouze uvedeným způsobem.
UPOZORNĚNÍ:
Při použití externích programů je vhodné, aby byly v externím programu uvedeny pouze
procedury a funkce bez uvedení podprogramu se jménem Main. Je to proto, že v případě
nalezení uvedeného podprogramu je tento vykonána ještě před spuštěním hlavního
programu. Jedná se tedy o tzv. inicializační část programu. Zde je proto vhodné provádět
opravdu pouze počáteční nastavení bez výkonných akcí. Ty je nutné uvést jako procedury,
které je potom možné aktivovat kdykoliv i z jiných modulů aplikace.
Při používání externích programů je vhodné si uvědomit, ve kterém okamžiku se konkrétní část programu provádí a jaký je postup kompilace programu. Nejprve se spustí překlad hlavního programu. Na jeho počátku jsou nalezeny definice externích programů. Překlad programu je proto pozastaven a překládají se uvedené externí programy. Načítá se text programu a vytváří se seznam procedur a funkcí, které je možné z programu použít. Pokud je nalezena v externím programu inicializační část programu mimo podprogram Main, je vykonána (ještě před spuštěním hlavního programu). Takto jsou zpracovány všechny zadané externí programy. Až potom se pokračuje v kompilaci hlavního programu, na jehož konci je spuštěna inicializační část hlavního programu uvedená v podprogramu Main.
předchozí lekce (1.40) | obsah kurzu | následující lekce (1.42) |