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