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:


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)

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