Lekce 1.41
Použití externího programu


předchozí lekce (1.40) obsah kurzu následující lekce (1.42)

V předchozích lekcích jsme si probrali spoustu zabudovaných procedur a funkcí. Jejich použití jsme si přitom ukazovali na jednoduchých programech, které byste měli být již schopni sestavovat sami. Po nějaké době ale zjistíte, že by bylo vhodné mít možnost spojit programy do jednoho většího celku. Mít možnost vytvořené uživatelské procedury a funkce použít i v jiném programu. Vytvořit si tak vlastní knihovnu procedur a funkcí. To je možné a jak to udělat si ukážeme právě v této lekci.

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)

OZOGAN, 1 Máje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz