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) |