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:
unit SYSVAR_A;
interface
implementation
begin
SysVarClear; {zruší systémové proměnné}
If DbfUse('CENIK') then
begin
{skok na náhodný záznam}
DbfGo(Random(DbfRecCount));
{vytvoříme proměnné s hodnotami z databáze}
SysVarSet('ciSlo', DbfReadStr('CISLO'));
SysVarSet('nazev', DbfReadStr('NAZEV'));
SysVarSet('typ' , DbfReadStr('TYP'));
SysVarSet('dodav', DbfReadStr('DODAV'));
SysVarSet('cena' , DbfReadNum('CENA'));
{v externím programu proměnné vypíšeme}
VYPIS; {procedura z externího programu !!!}
DbfUse('');
end;
end;
end.
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 KLONDAIK'. 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.
unit SYSVAR_B;
interface
implementation
procedure VYPIS;
begin
ConsoleClear;
Writeln('CISLO:' + SysVarGet('cislo'));
Writeln('NAZEV:' + SysVarGet('nazev'));
Writeln('DODAV:' + SysVarGet('dodav'));
Writeln('TYP :' + SysVarGet('typ'));
Writeln('CENA :' + IntToStr(SysVarGet('cena')));
SysVarShow;
end;
end.
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í jako seznam v sekci programu 'Implementationon'.
Na začátku je uvedeno klíčové slovo 'Uses', za kterým následuje na dalším řádku seznam
oddělený čárkami. Na konci seznamu je ukončovací středník. Začátek programu bude proto
nyní obsahovat následující řádky:
unit SYSVAR_A;
interface
implementation
uses
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. Pokud by například systém nenalezl definovanou sekci implementation, nebyl by schopen externí programy doplnit, protože by nenalezl místo v programu, kam má definici doplnit. Pokud jste však zkušený uživatel, 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í samostatného hlavního bloku příkazů mezi Begin a End.
Je to proto, že v případě nalezení uvedené části programu je tato 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 mezi hlavním Begin a End, 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 hlavním bloku mezi Begin a End.
předchozí lekce (1.40) | obsah kurzu | následující lekce (1.42) |