Programovanie v Delphi

Embed Size (px)

DESCRIPTION

Programovanie v Delphi

Citation preview

Dalibor iala

Programovanie v Delphi(verzie 1.0 a 5.0)

NITRA, 1999

1999 AM - SKALKA Mgr. Dalibor iala Programovanie v Delphi (verzie 1.0 a 5.0)V knihe s pouit nzvy programovch produktov a firiem, ktor mu by ochrannmi znmkami alebo registrovanmi ochrannmi znmkami prslunch vlastnkov.

Knihu venujem vetkm, ktor sa neboja experimentova v programovan.

vodomSasnos je preplnen mnostvom informci. Hada a njs t sprvnu o najrchlejie, je hlavnm problmom doby, v ktorej ijeme. Na pomoc nm prili vek (a postupne oraz menie) krabice, okolo ktorch sme so zatajenm dychom pouli vyslovova to magick slovo pota. Pota je vemi dobr pomocnk, no len pre toho, kto jeho schopnosti doke vyui. Aby sa po svete nepohybovali len sam odbornci, existuje obrovsk mnostvo programov (software) pre laickch pouvateov. Vvoju software sa venuje vek pozornos a tomu, kto tieto programy zhotovuje hovorme programtor, jeho innosti (pokia sa venuje tomu, za o ho platia) programovanie. Programovanie ako tak je innos maximlne logick. Aby bolo mon odbra o najviac mechanickch prekok, boli vytvoren programovacie jazyky. Jednm z najmodernejch je systm Delphi 5.0, pracujci v prostred MS Windows 95/98/NT. I ke sa v nasledovnch riadkoch budem opiera najm o verziu Delphi 3.0 ako rozumn a najrozrenej kompromis, poksim sa vdy upozorni aj na odlinosti v inch verzich (teda od Delphi 1.0 a po 5.0). Kniha, ktor prve drte v rukch, je uren nielen tm, o ctia tbu naui sa programova, ale aj skutonm programtorom (usmievajcim sa nad kiksami v prvch astiach), ktorm s uren nvrhy pri konkrtnom rieen aplikci v alch kapitolch. Na mnohch miestach som pouil computerovsk vrazy (nech mi sloveninri prepia, ale predsa len mi lepie znie slovo joystick ako vesel palika...). V prpade nejasnost uvdzam anglick aj slovensk vraz. Obsahom tejto publikcie nie je vychvlenie vhod Delphi a zavrhnutie ostatnch jazykov typu Visual Basic, C++ i Java. Kad programovac jazyk m svoje svetl i tmav miesta a v alch riadkoch sa budem snai poodhali vhody i nevhody. Mojou snahou vak bude najm jednoduchou cestou nartn monosti Delphi pri vlastnom vvoji aplikci.

4

Nie vdy bude tto cesta tou najschodnejou a tie je mon, e do knihy sa dostali chyby (na ktor urite pri programovan sami prdete). Dfam, e kniha prispeje k rastu vaej programtorskej osobnosti a programovanie v Delphi sa stane pre vs pitkom.

5

Zkladn pojmyZkladn pojmy uvatea a programtoraV sastnom softwarovom svete je MS Windows (na vine bench PC) tandardom zdruujcim zkladn spsoby ovldania potaa. Tu u nemuste venova vytvraniu prostredia a vymaniu spsobu komunikcie dlh hodiny, ako tomu bolo pri programovan v DOS-e. Zkladn vzhad aplikcie a spsob, ktorm sa dorozumieva s uvateom je vade rovnak. Univerzlnych vec je vo Windows trochu viac a preto by nebolo od veci uvies ich na sprvnu mieru: - aplikcia - tmto nzvom sa oznauje kad program beiaci v prostred Windows, - multitasking - prostredie Windows umouje sasn beh viacerch aplikci (napr. kalkulaka, hodiny a prehrva CD). Pre programtora je to vak neraz horie ako keby beala aplikcia iba jedna (ako je to v DOSe), - okno - obdnikov plocha na obrazovke uren pre komunikciu s pouvateom. Oknom nemusia by iba klasick okn aplikci, oknom me by hoci aj neormovan obdnik, ktor spracva nejak innos, - dialg - typ okna, prostrednctvom ktorho aplikcia komunikuje s uvateom - zva ide o odshlasenie sprvy i odpove na otzku. Na uzavretie dialgu vdy treba klikn na nejak tlaidlo (alebo krik v pravom hornom rohu), - help - pomocn informcie o programe, prpadne o aktulnej innosti (kontextov help). Zva sa zobraz po stlaen klvesu F1. - my - tvor s dlhm chvostom pripojenm do potaa. Prav tlaidlo zva sli na zobrazenie kontextovej ponuky a av sa pouva na potvrdenie vberu (ovea astejie). Prostredn tlaidlo (ak vbec existuje) je zva bez funkcie. - menu (po slovensky ponuka) - je zoznam prpustnch akci. Dostanete sa do stlaenm klvesu F10 alebo kliknutm avho tlaidla myi. - schrnka (clipboard) - je miesto, kam si mete odloi oznaen text i ksok obrzku a neskr ho na in miesto vlepi.

6

A ete zopr pojmov, ktor vldli svetu u za ias starho dobrho MS DOSu a pritom ete stle nevymreli... - bit - zkladn jednotka informcie. Me nadobda len hodnoty 0 alebo 1 (pravda/nepravda - true/false). - byte (bajt) - aj v dobe Windows 2000 je to osem bitov pokope. Kee je ich 8 a v kadom z nich me by bu 0 alebo 1, vsledn poet kombinci nl a jedniiek je teda 2 8 = 256. - sbor - daj (astejie skupina dajov) uloen na disku pod nejakm menom, - zdrojov kd programu (alebo zdrojk) - postupnos prkazov napsan v prslunom programovacom jazyku - mono ju upravova. - strojov kd - sada zkladnch intrukci, ktorm rozumie pota. - interpreter - programovac jazyk, ktor pri spusten programu vykonva postupne prkazy napsan na jednotlivch riadkoch (napr. BASIC). Riadok sa preta, interpreter ho prelo do strojovho jazyka a pota ho vykon. Tto innos sa opakuje pre kad riadok. Ak je v programe chyba, odhal sa a v momente, ke interpreter nedoke preloi alebo vykona spracvan riadok. - kompiltor - programovac jazyk, ktor po spusten programu najskr cel program prevedie do strojovho kdu a potom ho spust ako ben aplikciu (napr. DELPHI, PASCAL, C/C++...). Je podstatne rchlej, pretoe oproti interpreteru sa vynechva tanie riadku a preklad do strojovho jazyka. Pri prci v programovacom jazyku je kompilcia sasou spustenia. Najprv sa program skompiluje (automaticky po volan voby Run), a ak v om nie s chyby, spust sa. Kompilcia bez spustenia sa vinou vykonva, ak chcete odhali syntaktick chyby.

Programovanie v prostred WindowsProstredie MS Windows svojimi monosami postavilo pojem programovania (ako sme ho poznali z DOSu) takmer na hlavu. Zkladnou odlinosou Windows od DOSu je tzv. multitasking, teda monos sasnho behu viacerch aplikci.

7

Na om je zaloen cel programovac model Windows. Beiace aplikcie musia komunikova ako s ostatnmi aplikciami tak i so samotnm prostredm. Prostriedkom na to s tzv. sprvy (messages), prostrednctvom ktorch reaguje Windows na ubovon udalos (event). Ak naprklad uvate pohne myou, systm Windows okamite roztrbi sprvu, z ktorej je zrejm nielen to, e bola pohnut my, ale aj jej okamit sradnice, stav tlaidiel a mnoh alie daje. Udalosou me by (aj je) kliknutie myi na tlaidlo, vber z menu i minimalizcia okna. Pre kad udalos sa vyvol pecifick sprva, v ktorej s zakdovan vetky potrebn informcie nielen o udalosti, ale aj o okne, ktor udalos spsobilo... Dfam, e som vs tmito zloitmi zleitosami prli neodradil - subujem, e v alch astiach u bud uveden iba jednoduch veci. Aby ste ale aspo troku prekukli Windows, je potrebn si zapamta, e vek vina vec vo Windows sa rob prostrednctvom sprv.

Vizulne programovanieVizulne programovanie je spsob tvorby aplikcie (programu), pri ktorom nakreslme cel pouvatesk rozhranie a nsledne dopeme programov kd. V porovnan s programovacmi jazykmi minulosti (Basic, Pascal, C++ pre systm MS-DOS) predstavuj vizulne programovacie prostredia znan uahenie prce programtora. Pri klasickom spsobe si programtor musel predstavi (alebo nakresli na papier) vzhad obrazovky, menu, tlatok... a psa, psa, psa, a sa mu z klvesnice parilo. Napokon, ke po tdni zistil, e by to chcelo posun trochu doprava, nieo odobra a nieo prida, stl pred otzkou, i po nociach prehadva a meni cel program alebo radej napsa nov... Tvorcovia programovacch jazykov novej genercie (Visual Basic, Delphi, Visual Java...) umonili programtorom umeleck vyitie pri vlastnom nvrhu a budcej ubovonej prave tvaru aplikcie. Sta myou vytiahnu z palety tlatko, list-box, i cel textov editor a nsledne ho umiestni na formulr. A ke bude treba zmeni farbu, titulok, alebo niektor in z vlastnost (properties) niet ni ahie - sta klikn myou na prslun vlastnos a

8

zmeni prslun daj.

9

Zoznmte sa s nstrojomDelphi je typickm prkladom vizulneho programovacieho jazyka. Vytvran aplikcia sa nazva projekt (project) a pozostva z niekokch (a mnohch) sborov, ktor s zvyajne uloen v jednom adresri (zloke).

Obr. 58 Prostredie Delphi 3.0

Po spusten Delphi sa zobraz niekoko okien a panelov. Ich poet, obsah a poloha me by rzna. Najastejie sa pouvaj nasledovn asti: - hlavn menu (main menu) - umouje nahra projekt na disk, skompilova, spusti, nastavi parametre okien a mnoho inch uitonch operci, - ikonov pruh (speedbar) - obsahuje sadu tlaidiel uitonch pri manipulcii s projektom. S to ikony prslunch volieb z menu. Ikonov pruh si me kad uvate ubovone upravi. Sta na klikn pravm tlatkom myi, z ponuky vybra vlastnosti (properties) a metdou ahaj a pusti (drag & drop) jednoducho pridva i odobera tlatka. - paleta nstrojov (palette) - z tohto miesta vyberme nstroje (hovorme im aj objekty i komponenty), ktor pridvame do

10

projektu. Paletu mono op upravi poda vlastnho vkusu. - inpektor (object inspector) - zobrazuje vlastnosti (properties) a udalosti (events) aktulneho objektu umiestnenho na formulri. V prpade, e toto okno nevidte, sta stlai F11. - formulr (form) - je okno (window) tak, ako ho poznme z ostatnch aplikci. Do jeho vntornej oblasti umiestujeme prslun prvky z palety nstrojov a vsledn celok je vizulnym rozhranm medzi aplikciou a uvateom. V jednej aplikcii je zvyajne viac formulrov. - zdrojov kd (source) - program v jazyku object pascal, ktor riadi innos vslednej aplikcie. Ak m aplikcia viac okien, i podprogramov, prepna sa medzi nimi pomocou zlokovej lity v hornom riadku. Zdrojov kd je uloen v unitoch, priom kadmu benmu formulru zodpoved jeden unit. Medzi zobrazenm zdrojovho kdu a formulra sa prepnete klvesom F12.

Prostredie Delphi si kad me nastavi poda vlastnho vkusu. Ak chcete zmeni obsah niektorho okna, kliknite na pravm tlaidlom myi. Ak chcete zobrazi, alebo naopak skry niektor okno, pouite voby z menu View. Doporuujem vyska si, o ktor poloka rob... Ak chcete, aby prostredie aj cel projekt zostali nezmenen i po vypnut Delphi, vyberte z menu vobu Tools Environment Options a na karte Preferences zakrtnite obe voby v asti Autosave Options. Menu DelphiPokia sa vm spene podarilo naintalova a dokonca aj spusti Delphi, isto by ste sa najradej hne s vervou pustili do programovania. Tm z vs, ktor ete nie s experti vo Windows s vak uren nasledovn dobre mienen triky: - Nov projekt vytvorte najrchlejie vobou z menu File - New Application. - Ak chcete otvori existujci projekt, pouite tlaidlo alebo ponuku File - Open. K naposledy pouvanm sborom sa dostanete cez File Reopen. - Prcu je dobr uloi si na disk (aby ste k inkriminovanm projektom mohli pristupova aj v budcnosti). Rob sa tak

11

ikonou , prpadne cez menu File - Save Project As... - Menu Edit sa pouva pri prave projektu. Umouje pracova so schrnkou (clipboardom) a aktulnym formulrom (zarovna, zvi i presun komponenty). asto pouvanou vlastnosou je Undo (Ctrl+Z) - umouje vrti sp posledn innosti a Redo (Ctrl+Shift+Z) - opak Undo. - Menu Search m v sebe ukryt monosti hadania a zmeny textu v programe. - Z menu View (zobrazenie) je asi najdleitejia voba Project Manager, kde njdete zoznam pouvanch sborov.

Obr. 58 Project manager so zoznamom pouvanch unitov a formulrov

alej mete zobrazi Project source (zdrojov kd zabezpeujci spustenie aplikcie), nastavi ladiace prostriedky (Breakpoints,...) at. - U spomnan kompilciu programu mte vykona prostrednctvom voby Project - Compile (Ctrl+F9). Tu mi ned nespomen rchlos kompilcie, ktor je asn aj na pomalom potai (napr. C++ Builder mi tak ist aplikciu kompiloval 3 minty priom Delphi to trvalo 2 sekundy). - Niekedy, ke projekt zamrzne je vhodn kompletne ho skompilova aj vrtane vetkch pouitch kninc (Project Build All). - Najpodstatnejm (pre vinu programtorov) je menu Run, ktor umon projekt spusti. Okrem toho, e sa to d ikonou z ikonovho pruhu, pohodln je spa programy horcim klvesom F9 alebo vobou Run - Run. Prostrednctvom menu Run mte tie program krokova, i ladi vrtane monosti sledovania premennch. - Poloky menu Component slia na prcu s vlastnmi (najm vizulnymi) objektami Delphi. Viac sa o nich dozviete neskr. - Database je op voba pre manipulcie s databzami - je treba

12

ma naintalovan BDE. - V menu Tools njdete nstroje na prcu s grafikou (Image Editor), databzami, balkami a mnoho inch (ktor si sami mte nastavi). - No a napokon Help, ako to u z nzvu vyplva, prina kompletn prruku o Delphi...

13

Vizulny nvrh aplikcieAplikcia pre Windows sa sklad z dvoch ast: z pouvateskho rozhrania (okn, dialgy, tlaidl ...) a z programovho kdu. Pouvatesk rozhranie, teda vizulna as je vtvorom, ktor m sli na pohodln vstup a vstup dajov. Na to m Delphi pripraven obrovsk mnostvo komponentov v palete nstrojov. Ako teda tak vizulny nvrh aplikcie vlastne vyzer? Pri spusten Delphi sa automaticky vytvor nov aplikcia s pripravenm oknom formulru (tto operciu mete zrealizova aj vobou File -New Application z hlavnho menu).

Przdna aplikcia je okamite po svojom vytvoren funkn. Bez akhokovek zsahu do programovho kdu zskate po spusten (napr. F9), okno so vetkmi tandardnmi schopnosami (minimalizcia, maximalizcia, zatvorenie, zmena vekosti, posvanie,...).Vklada komponenty do pripravenho formulra je u potom jednoduchou zleitosou: sta klikn myou na prslun objekt z palety nstrojov a nsledne na formulri natiahnu rmik, v ktorom sa po pusten myi komponent objav. Naprklad vloenie tlaidla (button) do formulru sa jednoducho a rchlo vykon v nasledovnch krokoch:Obr. 58 Vber nstrojov tlaidla z palety

Obr. 58 Naznaenie rmika a vytvorenie komponentu po uvonen myi

Na zaiatku pre vs nemus by zo symbolu nstroja v palete plne zrejm, o ak komponent v skutonosti ide,

14

preto ak nad ktoroukovek ikonou podrte niekoko seknd my, objav sa strun popis - hint. To plat pre vetky dleit ovldacie prvky - a nielen v Delphi.

Niektor vizulne komponentyPre tch, ktor u horia nedokavosou za programovanm je tu pripraven popis aspo zkladnch nstrojov zloky Standard. Pri konkrtnych ukkach by ste mono vystaili aj z vizulnym nvrhom, napriek tomu som si neodpustil semtam napsa aj pr riadkov kdu. Cieom tejto kapitoly vak nie je naui sa programova, ale len oboznmi sa so zkladnmi nstrojmi Delphi a so spsobom programovania v Delphi.

Formulr (form)Najdleitejm vizulnym nstrojom je formulr (form). Ide o okno, ktor tvor zkladn stavebn plochu kadej aplikcie. Samotn prostredie Windows (angl. window = okno) je zaloen na rznych typoch formulrov. Formulr me ma dvojit rmik a variabiln vekos (sizeable) alebo jednoduch rmik a pevn vekos, prpadne ani nemus ma iaden rmik ani tituln psik. Formulre sa pouvaj skutone na mnohch miestach - i u ako dialgov okn, okn informci alebo priamo okn aplikcie. Windows (a teda aj Delphi) pozn zkladn dva typy aplikanch okien : MDI (multiple document interface) a SDI (single document interface). Aplikcia MDI me v rmci svojho - rodiovskho okna obsahova aj detsk okn s viacermi otvorenmi dokumentmi naraz, priom SDI doke pracova iba s jednm dokumentom sastne. No ale to u predbieham, teda bliie informcie o MDI a SDI sa dotate a v neskorch kapitolch... Formulr (form) by ste darmo hadali v palete nstrojov, nenachdza sa tam. Je natoko dleitou sasou, e ho mono zostroji priamo cez menu File - New Form. Tejto poloke menu tie zodpoved piata ikona v druhom riadku ikonovho pruhu . Vdy pri pridan novho formulru k aplikcii prid sa i nov programov jednotka (unit) do zdrojovho kdu.

15

Textov pole (Label)Textov pole (label) sa pouva na vpis pevnch (nemennch) textov. Po spusten aplikcie s textovm poom uvate neme zmeni text (to sa samozrejme netka programtora). Najastejie sa pouva na popis editanho poa.

Editan pole (Edit)Veda textovho poa je editan pole (edit) , ktor u umouje meni text poas behu aplikcie. Je mon do napsa jeden riadok ubovonho textu. Programovo je mon nastavi obmedzenia - napr. dku textu, i typ psma. Tento komponent sa pouva pre vstup dajov.

Poznmkov blok (Memo)asto je vak potrebn spracovva informcie vo viacerch riadkoch. Typickm prkladom je textov editor - naprklad ten, ktor je v prsluenstve Windows a nazva sa Poznmkov blok (Notepad). Takto komponent obsahuje aj Delphi a nazva ho poznmkov blok (memo) . Ako u z nzvu vyplva, najastejie sa vyuva pri spracovan poznmok. Pomocou tohto nstroja je tie mon vemi rchlo vytvori jednoduch textov editor. Nevhodou komponentu memo je sn iba to, e sa ned pri psan textu sasne poui viac druhov psma. Ak chcete zmeni font, mete tak urobi len pre cel memo naraz. V 32-bitovej verzii Windows (a teda aj v Delphi 3.0) je vak zabudovan komponent RichEdit, ktor tento drobn nedostatok odstrauje. Nedokavci ho njdu v zloke Win32.

Tlaidlo (Button)al nstroj - nazva sa tlaidlo (button) najastejie sli na odtartovanie prkazu alebo odshlasenie i vber z viacerch monost. V bench formulroch je to jeden z najpouvanejch komponentov. Niektor programovacie jazyky pouvaj tlaidlo dokonca aj v paneloch nstrojov (Delphi m vak na tento el pripraven pecilne

16

komponenty na zloke Additional a Win32).

Na chvku teraz prerum rozprvanie o zkladnch komponentoch a na konkrtnom prklade sa poksim ukza vm princp prce v Delphi. Kee slovo pota je odvoden od slova pota, skste zostroji jednoduch aplikciu, ktor umon spota, i odta dve sla. V prvom rade bude treba k tejto lohe vizulne navrhn formulr. Pripravte si teda nov projekt (File - New Application). Objav sa pred vami przdny formulr, do ktorho skste povklada potrebn komponenty. tandardnm spsobom tie mte zmeni vekos a polohu kadho z nich (dokonca aj samotnho formulru).Obr. 58 Vizulny nvrh Samozrejme, predpokladm, e nzvy typu Label1 sa Vm prli nepia (rovnako ako ani mne). Preto je vhodnejie kadmu komponentu nastavi vhodn meno. Tento krst vykonte prostrednctvom okna Object Inspector. Kliknite myou napr. na Button1 a v Object Inspectore (dostanete sa do napr. myou, alebo klvesom F11) prejdite na riadok Name. Pomenovanie Button1 jednoducho prepte na btSucet. Rovnako je vhodn nastavi nadpis tlaidla - prejdite na riadok Caption a zapte text &Set (znak & sli na nastavenie zvraznenho podiarknutho znaku). Pozor! Neplete si vlastnosti meno (Name) a nadpis (Caption) - kad z vlastnost reprezentuje nieo in. Meno (Name) budete pouva v programe pri pristupovan k prslunmu komponentu priom nadpis (Caption) je iba vizulny npis na komponente.

Meno (a ostatn vlastnosti prslunho komponentu) sa nastavuj v Object Inspectore na zloke properties (na zloke events sa nastavuj udalosti). Podobnm spsobom sa pokste zmeni aj ostatn nzvy komponentov. (Pri komponentoch, kde nenjdete vlastnos 17

Caption si nerobte starosti, povieme si o tom neskr). editanch okienok i pevnch textov tzv. prefixom so skratkou anglickho nzvu pre prslun komponent (napr. edCislo1, btZatvor, frmHlavny, lbNapis a podobne). Nie je to nutn, ale pri skutonom programovan sami ocente vhody tejto prce navye.

Pri pomenvan komponentov je vhodn odliova tlaidl od

V mench komponentov (rovnako ako ani v mench ostatnch premennch i inch identifiktoroch) sa nesm nachdza znaky s diakritikou, ani iadne pecilne symboly. Mu tu by len psmen anglickej abecedy, znak _ (podiarkovnk) a slice (ale nie na prvom mieste). Ke nastavujete prslun vlastnosti v Object Inspectore, mte okamite pozorova zmeny aj na prslunom formulri.Pre samotn innos programu je Obr. 58 Po pomenovan... vhodn navye vyisti vlastnos Text pre edCislo1 a edCislo2 a rovnako odstrni text Vysledky z prslunho poznmkovho bloku. Posledne menovan akciu vykonte nasledovne : Nastavte sa na Vysledky a v okne Object Inspector prejdite na vlastnos Lines. Kliknite myou na tri bodky vpravo od (TStrings) a v otvorenom okne vymate prslun text. Zvote Ok a poznmkov blok je ist... Akiste ste si vimli, e Object Inspector sli na nastavenie ubovonch vlastnost pre komponenty. Prostrednctvom tohto okna mte naprklad zmeni farby, i typ psma pre aktvny komponent. Okrem toho (po prepnut na zloku Events) tu nastavujete innosti (podprogramy) pre urit akcie (ale o tom a neskr). Pre tento prklad nm bud stai reakcie na prednastaven udalosti (teda v prpade tlaidla to bude kliknutie na). Prejdite na tlatko btSucet a dvojkliknite na om myou. Dostanete sa do okna zdrojovho kdu, kde pre vs Delphi u

18

pripravilo prslun hlaviku procedry (podprogramu). Vm zostva u iba dopsa programov kd (texty v mnoinovch ztvorkch {} psa nemuste, s to iba poznmky..) :procedure TfrmVypocty.btSucetClick(Sender: TObject); Var A,B:Integer; { Deklarcia vntornch premennch } begin A:=StrToInt(edCislo1.Text); B:=StrToInt(edCislo2.Text); { Funkcia StrToInt sa pouva na prevod reazca - znakov do selnej podoby - hodnoty premennej A, resp. B } Vysledky.Lines.Add('Set '+IntToStr(A)+' + '+ IntToStr(B)+' = '+IntToStr(A+B)); { Bodkami sa oddeuj jednotliv asti objektu. V tomto prpade chceme v poznmkovom bloku Vysledky pracova s riadkami Lines - chceme prida (Add) prslun text } end;

Zatia sa nemuste snai pochopi, o jednotliv prkazy znamenaj - berte to iba ako jednoduch ukku. Pozor ! Nemete hlaviku procedry - pridajte iba kd medzi begin a end. V tomto prpade budeme potrebova dve celoseln premenn, predajte teda ete pred begin riadok Var A,B:Integer;.Tak - to u je skuton programovanie. Ak chcete pristupova naprklad k vlastnosti text komponentu edCislo1, Delphi tomu porozumie, ke mu to oznate ako edCislo1.Text. Podobne, ako ste naprogramovali udalos pre stlaenie prvho tlaidla, skste teraz pripravi procedru pre druh tlaidlo. Op sa teda prepnite do formulru (naprklad klvesom F12) a dvojkliknite na btRozdiel. Kd bude vemi podobn (mete vyui schrnku - clipboard).procedure TfrmVypocty.btRozdielClick(Sender: TObject); Var A,B:Integer; begin A:=StrToInt(edCislo1.Text); B:=StrToInt(edCislo2.Text); Vysledky.Lines.Add('Rozdiel '+IntToStr(A)+' - '+ IntToStr(B)+' = '+IntToStr(A-B)); { Podobne ako StrToInt sa pouva na konverziu s textovho reazca do selnej premennej, pri vpise musme poui

19

opan funkciu - IntToStr na konverziu sla na reazec } end;

Na zver vm zostva projekt uloi na disk - Delphi3 vs k tomu automaticky vyzve, ak chcete spusti projekt (muste pomenova aj sbor projektu, aj sbor prslunho unitu a nesm sa samozrejme vola rovnako...). Zostrojen aplikciu mete spusti (naprklad klvesom F9 alebo prslunou ikonou) a po okamitej kompilcii mete kedykovek v budcnosti poui vytvoren *.exe sbor... Teoreticky ste teda spoznali spsob ako mysl Delphi, ale aby bol popis zkladnch komponentov kompletn, neskr spomeniem aj ostatn nstroje zo zloky Standard...

Zkladn vlastnosti vizulnych komponentovPri prci s komponentom sa asto stretvate z problmom, e potrebujete zmeni niektor jeho vlastnos. Ben veci ako vekos a poloha sa daj nastavi priamo - pomocou myi naahovanm a presvanm rmeka. Ale o ak chcete nastavi in farbu, i font? Na to pre ns pripravilo Delphi okno Object inspector. Prepnete sa do bu myou, alebo klvesom F11. Zobrazi, i skry ho mete cez menu View. V hornej asti Object inspectora je nzov a typ aktulneho objektu. V druhom riadku s dve zloky: properties a events. (V Delphi 1.0 je to posledn riadok). Najprv sa budeme zaobera prvou vlastnosami (properties). Kad vizulny nstroj m svoje vlastnosti. Niektor s pecifick, ale mnoh maj podobn alebo rovnak vznam pre viacer komponenty. Prehad najzkladnejch je uveden v tabuke:Vlastnos alignment border style caption color enabled font Slovensky zarovnanie tl okrajov titulok farba povolenie typ psma Vznam - pouitie zarovnanie textu vntri komponentu (vavo, vpravo a do stredu) okraje mu by dvojitou alebo jednoduchou iarou nadpis alebo text komponentu farebn schma aktulneho objektu povol (true) alebo zake (false) prstup ku komponentu vekos, druh, farba a rez psma

20

vka komponentu v bodoch poda nastavenej mierky hint naznaeni text v malom okienku, ktor sa objav, ak e podrte my nad komponentom poas behu programu po dobu niekokch seknd; podmienkou zobrazenia je nastavenie show hint na true checked stav pre radio button a check box zist, i je poloka zapnut obrzok, ktor bude reprezentova icon ikona komponent items (lines) poloky textov obsah objektu, ktor pracuje s viacermi (riadky) riadkami av okraj vzdialenos komponentu od avho left okraja vlastnckeho okna name nzov nzov premennej (objektu, komponentu) show hint ukza po nastaven na true umon poui hint radu tab order poradie poradie pri skkan pomocou tabeltora text text text napsan vntri komponentu top horn okraj vzdialenos komponentu od hornho okraja vlastnckeho okna visible viditenos zobraz (true) alebo skryje (false) komponentu poas behu programu width rka rka komponentu v bodoch Tab. 4 Zkladn vlastnosti vizulnych komponent height vka

Tieto aj ostatn vlastnosti mono meni ako pri vizulnej tvorbe rozhrania, tak i programovo poas behu aplikcie. Zmena niektorch vlastnost sa prejav a pri behu programu. Niektor vlastnosti (hint) s zvisl od inch vlastnost (show hint). Zo zaiatku asi budete ma problmy vyzna sa v tokch dajoch. Ni si z toho nerobte, postupne - poas ich pouvania prdete na kore mnohm veciam, ktor s tu iba naznaen... K uvedenej tabuke sa budete mono v budcnosti astejie vraca. Teraz sa vak pome venova druhej zloke Object Inspectora - zloke Events. Prepnete sa na u prostrednctvom myi (kedykovek v budcnosti sa mete prepn sp na vlastnosti - properties). Prostrednctvom zloky Events sa nastavuj udalosti, na ktor m prslun komponent zareagova pecifickm spsobom. Tu sa realizuje prepojenie vizulnej asti

21

(formulr, komponenty...) so zdrojovm kdom. Op pre prehadnos uvdzam niektor zkladn udalosti, s ktormi sa stretnete v budcnosti, pri programovan :Udalos OnActivate Vznam - pouitie Nastva pri aktivizcii okna - teda ke sa okno stva aktvnym (ke sa do prepnete) OnChange Udalos pri zmene obsahu komponentu (napr. EDITu) OnClick Udalos kliknutia myi, alebo stlaenia ENTERu OnCreate Nastva pri vytvran okna (komponentu) OnDblClick pecilne pri dvojkliku myou na komponent OnEnter Udalos pre komponenty - ke do komponentu vstpite OnExit Nastva, ke sa z komponentu prepnate napr. do inho komponentu (komonent strca focus) Stlaenie klvesu pri aktvnom komponente OnKeyDown OnKeyPress Stlaenie jednoznakovho klvesu Uvonenie klvesu pri aktvnom komponente OnKeyUp OnMouseDown Stlaenie niektorho tlaidla myi nad komponentom OnMouseMove Premiestnenie myi nad komponentom OnMouseUp Uvonenie niektorho tlaidla myi nad komponentom OnResize Zmena vekosti (najm pre samotn okno) OnShow Zobrazenie (okna, dialgu...) Tab. 4 Zkladn udalosti pre prcu s komponentmi

Pri prci s komponentom je tento aktvny - windows tomu hovor, e komponent m focus. Ke sa (naprklad tabeltorom, alebo myou) prepnete z editanho polka naprklad na tlaidlo, windows vyhlsi, e editan polko stratilo focus a tlaidlo zskalo focus. Pripravte si nov aplikciu a pome sa pozrie naprklad na vlastnosti a udalosti novho formulra. Prepnite sa do okna Object Inspector (F11) a nastavte sa na zloku udalost (Events).Obr. 58 Udalosti pre formulr

Nastavte sa naprklad na udalos OnCreate.

22

Do przdneho priestoru, kde blik kurzor zatia nemuste psa ni, iba na om dvojkliknite myou. Vypln sa nzov FormCreate a Delphi vs nastav do zdrojovho kdu. Delphi u pre vs pripravilo hlaviku, zaiatok a koniec procedry (podprogramu). Sta vm teda dopsa ShowMessage(Vytvorenie formulra); a po spusten aplikcie (klvesom F9) sa najskr objav prslun hlka, a potom sa vytvor formulr. Zatvorte spusten aplikciu a vrte sa sp do Delphi (ak aplikcia stle be, muste ju ukoni Run/Program Reset (Ctrl+F2)).

Medzi zobrazenm zdrojovho kdu a formulra (vizulny nvrh) sa prepnate klvesom F12. Zo zaiatku bude pre vs vhodnejie ma astejie prepnut okno na formulr a Object Inspector na vlastnosti - Properties.Takto sa teda programuj udalosti. Skste si teraz naprogramova udalos pre kliknutie myi na formulr : prejdite op do okna Object Inspector, prepnite sa na udalosti (Events), nastavte sa na riadok OnClick a do przdneho priestoru skste teraz napsa nejak nzov. Naprklad Kliknutie . Po stlaen ENTERu alebo dvojkliknut na prslun nzov sa op dostanete do zdrojovho kdu. Samozrejme, hlavika pripravenej procedry je u poda vho nzvu. Dopte kd a mete ska...procedure TForm1.Kliknutie(Sender: TObject); begin ShowMessage('Mte pekn my.'); end;

V Delphi mete s vhodou vyui jednu procedru na viacero udalost, ktor maj rovnak vstup. Pouva sa na to mal pka vpravo od prslunej udalosti.

Obr. 58 Vber z existujcich procedr

23

Pozor - funguje to iba pre udalosti s rovnakmi parametrami! Nesprvna manipulcia s udalosami me niekedy vies k nekonenej sluke, niekedy dokonca k zamrznutiu potaa. Toko teda v strunosti o okne Object Inspector a o zkladoch prce v Delphi. Podstatnm je spsob prepnania sa medzi zdrojovm kdom a formulrom (F12) a zobrazenie okna Object Inspector (F11). Dleit je tie vedie sa prepna medzi vlastnosami (properties) a udalosami (events) prslunho komponentu a vedie ich zmeni. Zatia sme si ukzali iba niektor komponenty - smelo vak mete experimentova aj s ostatnmi. Vzhad okna, farebn usporiadanie a celkov zladenie jednotlivch komponentov je pre vyuitie aplikcie vemi dleit - zatia teda skajte poui Delphi ako inteligentn editor formulrov. V nasledovnch kapitolch sa viac budeme venova samotnmu programovaniu, resp. prci s kdom... T, ktor u programovac jazyk Pascal poznaj a sami vytvorili nejak programy (napr. v DOSe) mu nasledovn kapitolu iba prebehn. T, ktor sa chc o algoritmizcii, Pascale a programtorskch trikoch dozvedie viac ako je zhrnut na tchto pr strnkach - smelo mu tudova kniky Turbo Pascal I, II z ponuky AM vydavatestva A napokon vetci ostatn - pozorne tajte alej...

24

Programovanie v DelphiDoteraz sme sa bavili s viac-menej vizulnou interpretciou vzhadu budcej aplikcie. Poda mjho nzoru vzhad a estetick usporiadanie obrazoviek aplikcie je uritou formou novodobho umenia. Mono ste u pouli tvrdenie Obal predva. V programtorskej interpretcii to znamen, e vizulny vzhad aplikcie je to prv, o si uvate vimne. Nemono vak zabda ani na funknos. Ve k omu by nm bolo ndhern erven Ferrari, keby nemalo motor? Podobne je to aj v programovan. asto som sa stretval s aplikciami preplnenmi grafikou, animciami a vraznmi menu i tlaidlami, ktor vak okrem ohrenia pouvatea nedokzali takmer ni. Takto aplikcie zbytone zaberaj miesto na pevnom disku a po chvkovom oiali upadaj do zabudnutia. Preto sa tie hovor, e dobr npad je 90% spechu! Naou lohou bude njs to prav sitie medzi obsahom (programov monosti) a formou (vizulna interpretcia). A aby to bolo mon dokza, musme spozna aj tajomstv programovania... Samotn programovanie spova najskr v navrhnut efektvneho algoritmu - teda postupu rieenia problmu a a potom v prepsan do konkrtneho programovacieho jazyka. Algoritmus nemusme vdy kls do svisu s potaom, vea algoritmov nevedomky vyuvame v kadodennom ivote S priateom - vydavateom som dlho viedol spor o tom, i algoritmizcia vbec patr do tejto kniky, napokon sme to vak vyrieili kompromisom - pr slov o algoritmizcii tu predsa njdete (sn na pochopenie myslenia programtora to bude stai...)

Algoritmizcia (iba v skratke)V prvom rade - o je algoritmizcia (neberte to prosm ako definciu) : Je to logick (aspo niekedy) postup, ktor vedie k zostaveniu algoritmu. Kad algoritmus m 6 zkladnch vlastnost: - elementrnos - postup je zloen z mench ast, ktorm

25

vykonvate (pota) rozumie - determinovanos - v kadom kroku algoritmu je jednoznane uren, o bude alej - rezultatvnos - pre rovnak vstupn daje d algoritmus vdy tie ist vstupy - konenos - kad algoritmus mus niekedy skoni - hromadnos - postup riei cel triedu problmov, nie len jeden problm - efektvnos - o najjednoduchie a najrchlejie vyrieenie problmu Tieto vlastnosti by mal spa kad program, ktor kedykovek vytvorte. Okrem zkladnch vlastnost algoritmu je vhodn spomen si na zkladn prvky matematiky. Programovanie je toti vedn odbor, ktor z matematiky vychdza. K tm zkladnm matematickm poznatkom patria pojmy: premenn, opercia, funkcia, mnoina... Iba vemi v strunosti a v zkom programtorskom vzname sa poksim tieto pojmy vyjadri: - premenn - daj reprezentovan svojim identifiktorom (nzvom) a hodnotou. Naprklad A=3. A je identifiktor; 3 je hodnota. Priradenie hodnoty do premennej sa v Pascale vykonva prostrednctvom priraovacieho prkazu:=. Teda napr.: B:=25; - opercia - zkladn matematick kon (+,-,*,/), - funkcia - innos, ktor vrti vsledok. Napr. sin(2+x), - mnoina - shrn prvkov s tou istou vlastnosou, Ako som u na zaiatku spomnal, algoritmus je postup rieenia problmov. Sklad sa z mench celkov, ktorm hovorme algoritmick kontrukcie. Zkladn algoritmick kontrukcie s: Sekvencia - priama postupnos prkazov. Prkaz je slovo, ktormu pota rozumie. Vetvenie (alternatva) - rozdelenie postupu na dve vetvy v zvislosti od splnenia, resp. nesplnenia podmienky. Napr. Ak je premenn AStrToTime('12:00') Then ShowMessage('Dobr de!') Else ShowMessage('Dobr rno'); end;

Podmienku v tomto prpade tvor logick vraz Time > StrToTime(12:00). {Time je funkcia, ktor vrti aktulny as a StrToTime je funkcia konvertujca reazec znakov na as}. Na vpis je op vyuit procedra ShowMessage.

Na Slovensku mme tch slunch pozdravov trochu viac. Asi nikoho by nepoteilo, keby ste ho o 22.00 pozdravili Dobr de. Na ukku neplnho vetvenia teda celkom dobre me posli nasledovn kd :If TimeStrToTime('10:00')) and (Time=StrToTime('18:00') Then ShowMessage('Dobr veer');

Vimnite si tie pouitie vrazu and (a sasne). V tomto prpade to znamen, e pozdrav Dobr de! sa vykon iba medzi 10:00 a Obr. 58 Takto ma pozdravil pota o 23:45... 18:00. Urte ste pouli o pokusoch potaovho pirtstva. Naprklad krde z banky sa u teraz nerob spsobom znmym z divokho zpadu, ovea jednoduchie je to cez pota... u

Predstavte si teraz, e stojte na strane zkona a chcete zamedzi nepovolanm osobm, aby sa dostali k vmu software (resp. dajom). Najzkladnejou (a najpouvanejou) ochranou je pouitie hesla... Pripravte si teda na ukku nasledovn jednoduch formulr :Kd programu bude jednoduch : Ak uvate zad sprvne heslo, pochvlime ho a pustme ho alej, inak spustme alarm (v tomto prpade to bude jednoduch ppnutie) a ukonme aplikciu...

42

Obr. 58 Jednoduch formulr s jednm tlaidlomprocedure TfrmHeslo.btHesloClick(Sender: TObject); Var Heslo:String; begin Heslo:=''; If InputQuery('Overenie prstupu','Vlote heslo',Heslo) Then If Heslo='veslo' Then ShowMessage('Prstup povolen !!!') Else Begin MessageBeep(65535); ShowMessage('Zl heslo !!!'); End; If Heslo'veslo' Then frmHeslo.Close; end;

Vimnite si pouitia funkcie InputQuery - tto funkcia sli na vstup jednoduchho reazca. Prvm parametrom je nadpis okienka, druhm text v okne a tretm je reazcov premenn, do ktorej sa m daj uloi. Ak uvate stla tlaidlo OK, funkcia InputQuery vrti logick hodnotu true (pravda) a podmienka If InputQuery... bude splnen. (Program teda prechdza na pln vetvenie If Heslo='veslo') Ak uvate stla tlaidlo Cancel (alebo ESC na klvesnici), program sa presunie a na riadokIf Heslo'veslo' Then frmHeslo.Close;

, ktor hovor o alej podmienke. Ak teda nebolo ako heslo zadan slovo veslo, program sa ukon... sdri tvorbe programu pouite vhodn pomenovania komponentov. Napr. v mojom prpade som nazval formulr menom frmHeslo a tlaidlo sa pi pomenovanm btHeslo.

Pri tvorbe programu pouite vhodn pomenovania komponentov. Napr. v mojom prpade som nazval formulr menom frmHeslo a tlaidlo sa pi pomenovanm btHeslo.

43

Obr. 58 Vsledok volania funkcie InputQuery

Urite ste prili na to, e sprvnym heslom je slovo veslo. Pozor na rozdiel medzi VESLO a veslo...Dfam, e tokmi podmienkami som vs neodradil od alieho tdia. Niekedy sa skutone stane, e podmienok je vo vaom programe akosi privea, a vlastne neviete, o k omu patr. Preto je vhodn dodriava urit formu odsadenia (i u pri podmienkach, cykloch, alebo podprogramoch...).

lohy Vetvenie je pri praktickom programovan skutone asto pouvan. Pre pochopenie ostatnch ast je potrebn pozna a vyuva vetky monosti vetvenia, ktor Delphi ponka... Ak teda mte chu, vyskajte si pomocou vetvenia naprogramova nasledovn veci... 1. Ovea krajie (a efektvnejie) by bolo rieenie poslednho prkladu, keby sa namiesto psmen zobrazovali na obrazovke iba hviezdiky (aby nenpadn pozorovate spoza vho chrbta nemohol z obrazovky odpozorova heslo). Nemuste teda pouva funkciu InputQuery, ale chce to trochu prerobi zkladn formulr - umiestnite na komponent TEdit (z palety Standard) a nastavte mu vlastnos PasswordChar na *.

Obr. 58 Modernejia verzia hesla

A o ak m uvate stlaen Caps Lock??? Vaka malej nepozornosti obsluhy predsa netreba hne spa alarm prerobte posledn program tak, aby zobral aj veslo, aj

44

VESLO. 2. Pred Heslom som vm ukzal jednoduch program, ktor slune pozdrav. Skste ho prerobi tak, aby na zaiatku uvate vybral jazyk, v ktorom chce s programom komunikova a potom na zklade tohto vberu bol pozdraven vo vlastnej rei... Vber jazyka (a vlastne aj cel prklad) mete spravi naprklad nasledovne :procedure TForm1.FormCreate(Sender: TObject); Var Jazyk:Integer; begin Jazyk:=0; Jazyk:=StrToInt(InputBox('Vyberte jazyk / Select language', 'Slovensky = 0, esky = 1, English = 2,'#13#10+ 'Deutsch = 3, French = 4, Russian = 5','0')); Case Jazyk Of 0:ShowMessage('Vitajte!'); 1:ShowMessage('Vtejte!'); 2:ShowMessage('Welcome!'); { sem doplte pozdravy v ostatnch jazykoch...} End; end;

Vraz v prkaze Case mus ma vsledok ordinrneho typu -

teda boolean, integer, char alebo vymenovan typ... Upozornenie pre programtorov v C++ na porovnanie s prkazom switch : Program vykon iba t vetvu, ktorej vyhovuje vraz. Ostatn vetvy sa preskakuj (V C++ sa na to mus poui napr. prkaz break) Vimnite si vyuitie viacnsobnho vetvenia. Ak by ste do

jednej vetvy chceli umiestni viac prkazov, muste ich uzavrie medzi kov slov Begin a End. Napr :Case Jazyk Of 0:Begin ShowMessage('Vitajte!'); ShowMessage('Predstavujeme vm program, ktor pozdrav!'); ShowMessage('A dokonca slune!'); End; 1:ShowMessage('Vtejte!'); 2:ShowMessage('Welcome!'); 2..5:ShowMessage('Naute sa po slovensky!'); Else ShowMessage('Tak jazyk nepoznm!'); End;

45

Ak vyberiete jazyk mimo vymenovanch, vykon sa(podobne ako klauzulou Else. pri obyajnom vetven) prkaz (blok) za 3. Upravte predchdzajcu lohu tak, aby program pozdravil poda aktulneho asovho seku v prslunom jazyku. Naprklad angliania sa zdravia dopoludnia Good Morning a popoludn Good Afternoon... 4. *** Sksenej a pekulanti mu sksi vybera jazyk prostrednctvom vlastnosti ItemIndex komponentu TRadioGroup (njdete ho na zloke Standard)...

46

Kam id zajace alebo praktick dkazy (Cyklus)Opakovanie tej istej innosti niekoko krt po sebe doke pota uplatni vemi etrnm spsobom nazvanm cyklus. Ak chceme nieo opakova, je potrebn si uvedomi: o mme opakova - blok prkazov, nazvame ich tie telo cyklu Ako asto to mme opakova - to je uren prostrednctvom podmienky cyklu Poda toho, ako tieto dva bloky skombinujeme, rozoznva pota tri druhy cyklov: cyklus s pevnm potom opakovan, cyklus s podmienkou na zaiatku a cyklus s podmienkou na konci.

Cyklus s pevnm potom opakovanJe asi najjednoduchm typom cyklu. Telo cyklu sa vykon pevn poet krt, priom riadiaca premenn (t.j. v tomto prpade i) men svoju hodnotu od 1 po n s rozmedzm (krokom) 1. V Delphi sa pre tento typ cyklu pouva vyjadrenieFor i:=1 To n Do prikaz1;.

Ak chcete aby sa riadiaca premenn v cykle zmenovala s krokom 1, pouite sekvenciuFor i:=n DownTo 1 Do prikaz1;.

Riadiaca premenn sa nemus vola len i (index). Vdy vak mus by vopred deklarovan. Riadiaca premenn me by len ordinrneho typu (kad hodnota mus ma pevne urenho predchodcu i nasledovnka), napr.: integer, byte, longint, char... Niekedy nm me vyhovova napr. zana od sla 7 a koni slom 18. Syntakticky to zapeme: For i:=7 To 18 Do prikaz1; ast pouitie cyklu s pevnm potom opakovan je pri prci s poliami. Telo cyklu je tvoren iba jednm prkazom - ak chcete do tela vloi viac prkazov, muste poui sekvenciu Begin prikaz1; prikaz2; ... prikazn; End; 47

V druhom ronku na vysokej kole sme raz postavili jednho nho prednajceho pred zvan problm, ktor sa vm teraz poksim zreprodukova : Ide jeden zajac -hop, hop. Za nm ide al zajac -hip, hop. Za nm nasleduje al zajac -hop, hop a samozrejme za nm je al zajac -hip, hop. Za nm ide al zajac -hop,hop a al a al... Otzka znie : Kam id zajace? Problm je fakt zloit (prednka na druh tde sa zaala otzkou Tak kam vlastne ili tie zajace???) a preto by bolo vhodn odsimulova ho potaom. Vimnite si, e kad prny zajac hopk cez -hip, hop a kad neprny zajac -hop, hop. Zajacov je vea (potajme napr. pevn poet 20 zajacov) a algoritmus sa me rozbehn... Pripravte si teda nov projekt, dvojkliknite na formulr a pre udalos OnCreate zapte nasledovn kd :procedure TForm1.FormCreate(Sender: TObject); Var i:Integer; ZajStr:String; begin For i:=1 To 20 Do Begin If i mod 2 = 0 Then ZajStr:=' "Hip, Hop"' Else ZajStr:=' "Hop, Hop"'; ZajStr:=IntToStr(i)+'. Zajac : '#13#10+ZajStr; ShowMessage(ZajStr); End; ShowMessage('Kam id zajace?'); end;

Aby ste zistili, i sa jedn o prneho, alebo neprneho zajaca, mete vyui opertor mod - zvyok po celoselnom delen. Naprklad ak budete deli slom 2, zvyky mu by len 0,1. Program v cykle najskr inicializuje reazcov premenn ZajStr poda toho, i je zajac prny, alebo neprny. Do premennej ZajStr tie treba priradi slo zajaca (prehome riadiacu premenn cyklu na reazec funkciou IntToStr) a slovo . Zajac urujce rdov slovku.

Ak chcete vloi do textu ENTER, mete poui mal trik : sta prida k reazcu ASCII znaky #13 (CR) a #10 (LF). Ak sa vm text reazca nezmest do jednho riadku, jednoducho ukonite reazec, pouite opertor + (spjanie reazcov) a 48

pokraujte v novom riadku... Po skonen cyklu sa zobraz otzka Kam id zajace? T, ktor na to ani po jednoduchom odsimulovan neprili nech sksia zameni slo 20 (poet opakovan) na 999. Som si ist, e ke vm program vype :

Obr. 58 Tu u odpove muste vedie urite...

Urite u budete pozna odpove (t sa vm me zobrazi na formulri po odklepnut Ok v poslednom dialgu Kam id zajace?)

Obr. 58 Dlho oakvan odpove na otzku Kam id zajace?

Vyskajte si zmeni hodnoty pre cyklus. Nie kad cyklus toti mus zkonite liez na nervy, niekedy me dokonca vemi dobre pomc... Doporuujem nastavi poet opakovan na 999, skompilova program a vsledn *.exe aplikciu da priateom na odskanie ako super novinku stiahnut z internetu...Cyklus s podmienkou na zaiatkuJe alm asto pouvanm cyklom. Nazvame ho tie opatrn cyklus. S vhodou sa pouva tam, kde vopred nepoznme poet opakovan tela cyklu. Telo cyklu sa v tomto prpade opakuje, pokia plat podmienka cyklu. Najskr sa testuje splnenie podmienky a ak je podmienka splnen, vykon sa telo cyklu. Potom sa program vrti sp na test podmienky a tak alej. Telo cyklu sa nemus vykona ani raz, ak hne na zaiatku podmienka nie je splnen. Ak je podmienka splnen stle, vznikne nekonen cyklus (programtori, chrte sa ho!).

49

V Pascale je syntax tohto cyklu nasledovn:While podmienka Do prikaz;

Op namiesto jednho prkazu mete poui cel blok prkazov (oddelen prostrednctvom sekvencie begin - end). Podmienka je rovnako ako v prpade vetvenia tvoren logickm vrazom, ktorho vsledkom je bu pravda (true) alebo nepravda (false). Ak je v podmienke vyuit riadiaca premenn, nemus by u len ordinrneho typu! Typickm prkladom na otestovanie vznamu (resp. funknosti) cyklu (nie len While, ale ubovonho) me by vypotanie stu vetkch sel od 1 do 100. Op si pripravte nov aplikciu, dvojkliknite kdekovek na formulri a vyskajte nasledovn kd :procedure TForm1.FormCreate(Sender: TObject); Var i,Suma:Integer; begin i:=0; Suma:=0; While i50; end;

V cykle som vyuil opertor mod - zvyok po celoselnom delen. Ak je teda zvyok po delen islom 13 nulov (teda slo je deliten trinstkou bezo zvyku), vype sa sprva. Cyklus sa ukon, ak bude i>50. Ak vak troku nad algoritmom pouvaujete, isto prdete na to, e v tomto konkrtnom prpade je zbyton, aby cyklus chodil po vetkch slach. Sta, aby sme skkali s krokom 13...

52

Efektvnej (aj jednoduch) algoritmus problm je teda mon zostroji nasledovne :procedure TForm1.FormCreate(Sender: TObject); Var i:Integer; begin i:=13; Repeat ShowMessage(IntToStr(i)); i:=i+13; Until i>50; end;

pre

tento

53

lohyNa precvienie zkladnch algoritmickch kontrukci a ich jednoduchej aplikcie v DELPHI je vhodn vyska si rieenie praktickch problmov. Pre zaiatok (pokm nepoznte monosti prce s komponentmi) to bud najm lohy o celch slach - tie s relatvne jednoduch, podmienky zadan slovne sta iba prepsa matematickm spsobom... 1. Zostrojte program, ktor postupne vype vetky sla od 15 po 75, ktor s deliten siedmimi alebo smimi. (vyuijete tu opertor or) 2. Zostrojte aplikciu, ktor bude donekonena zdravi uvatea postupne v 4 svetovch jazykoch. (projekt zastavte iba pomocou Delphi cez menu Run/Program Reset - Ctrl+F2 alebo magickm trojhmatom Ctrl+Alt+Del). 3. Do premennch A,B prirate na zaiatku nejak hodnoty a pomocou vetvenia vypte najviu z nich. 4. Predchdzajci prpad prerobte pre tri premenn A,B,C. 5. Spotajte vetky sla od 3 po 30. Zostrojte tri programy a v kadom vyuite in typ cyklu (FOR, WHILE, REPEAT) 6. Vynsobte spolu vetky tie sla od 10 po 100, ktor s deliten slicou sedem. Vsledok vypte prostrednctvom procedry ShowMessage. 7. Mono ste u pouli o postupnosti sel, ktor objavil matematik Fibonaci. D sa vyui na mnohch miestach a jej tvar je : 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ... Plat tu nasledovn zkonitos : prv dve sla s pevn jedniky. Tretie slo vznikne ako set prvho a druhho. tvrt slo vznikne ako set druhho a tretieho. Piate slo vznikne ako set tretieho a tvrtho... Napte program, ktor vype prvch 50 lenov Fibonaciho selnho radu. 8. Zostrojte aplikciu, ktor zist, i je dan rok priestupn alebo nie (rok je priestupn, ak je deliten 4 a sasne nieje deliten 100, alebo je deliten 400). Aktulny rok zistte procedrou DecodeDate(Date, Den, Mesiac, Rok). 9. Vypotajte poet dn od 1. janura roku 0.

54

Podprogramy - procedry a funkcieV relnom ivote existuje mnostvo innost, ktor s zloen z viacerch elementov a ako tak vytvraj celok. Prkladom me by rodiovsk zvolanie na ratoles: Janko, cho kpi chlieb! a Janko, pouen sksenosami najskr zoberie nkupn taku, peniaze, obleie sa a ide do obchodu. Pok na von kok a nsledne vtrhne medzi regly, kde uchmatne najerstvej bochnk. Pri pokladni zaplat a nkup odnesie domov. S minimlnou zmenou v riadiacom programe by Janko dokzal kpi aj iarovku, i destilovan vodu... innos (alebo as programu), ktor sa asto (aspo 2x) opakuje sa nazva podprogram. V Pascale sa podprogram najastejie realizuje procedrou alebo funkciou. Funkcia je tak podprogram, ktor vrti do programu urit vypotan hodnotu (naprklad zo kolskch ias si mono pamtte na goniometrick funkcie - teda napr. x:=sin(30)). Isto ste si vimli, e v doterajom programovan ste na mnohch miestach vyuvali procedry (napr. ShowMessage), nekodilo by teda aspo formlne uvies ich syntaktick truktru:procedure MenoProcedury(formlne parametre); {hlavika} {defincia a deklarcia loklnych premennch} begin {telo procedry} end;

Formlne parametre uveden v hlavike procedry slia na komunikciu s ostatnmi asami programu - s tu uveden nzvy a typy premennch, ktor procedra potrebuje na zskanie a vrtenie dajov. Ak pouvate parametre, je dobr vedie, e cez men premennch budete k dajom pristupova vntri procedry. Pri volan procedry vak muste zachova rovnak dajov typy. Hlaviku procedry je mon realizova nasledovnmi troma spsobmi (alebo ich kombinciou): procedra bez parametrov - tento prpad je najjednoduch. Hlavika procedry m v tomto prpade tvar: procedure MenoProcedury;. Nevhodou je ale to, e procedra me komunikova s vonkajm svetom iba prostrednctvom

55

globlnych parametrov (deklarovanch v deklaranej asti hlavnho programu (unitu)) . procedra s parametrami volanmi hodnotou (vstupn premenn) v hlavike procedry je uveden nzov premennej pouit v procedre, dvojbodka a typ premennej. Pri takomto volan procedry sa v jej vntri automaticky vytvor skryt loklna premenn, do ktorej sa nakopruje zadan vstupn hodnota (preto ten nzov). Procedra s ou pracuje, pokojne ju me aj zmeni, ale daj v hlavnom programe zostane nezmenen... procedra s parametrami volanmi odkazom (vstupno-vstupn parametre) - v hlavike procedry je pred nzvom premennej uveden kov slovo var, inak je parameter uveden rovnako ako v predchdzajcom prpade. Procedra pracuje priamo s premennou z hlavnho programu - teda jej hodnotu mete aj zmeni.

Ak chcete v hlavike procedry poui viac premennch rznych typov, muste ich oddeli bodkoiarkou. Napr.procedure VypisInfo (meno: String; plat: Real);

Pri pouvan parametrov volanch odkazom mus by v hlavike procedry pred kadou premennou slovo var. Volanie procedry z nadradenho programu sa uskuton zapsanm jej mena. Zadefinovan procedra sa stva akoby novm prkazom Pascalu. Zostrojme procedru, ktor vykresl jednoduch domek. Potrebujeme pozna sradnice domu na obrazovke a nechceme, aby procedra svojou innosou tieto sradnice zmenila. Vyuijeme teda parametre volan hodnotou. Procedry sa vdy umiestuj do deklaranej asti. Umiestnime ju v tomto prpade do loklnej deklaranej asti unitu - hne za kov slovo implementation...

56

implementation procedure Domcek(X,Y:Integer); begin With Form1.Canvas Do Begin MoveTo(X,Y); LineTo(X+10,Y-10); LineTo(X+20,Y); LineTo(X,Y); LineTo(X,Y+10); LineTo(X+20,Y+10); LineTo(X+20,Y); End; end;

Na vykreslenie iar som priamo pouil pltno (canvas) aktvneho formulra (v mojom prpade Form1). O pltne, aj o jeho metdach (LineTo, MoveTo...) si povieme neskr, nedokavcom prezradm len toko, e MoveTo presunie kurzor na uveden pozciu a LineTo nakresl iaru do uvedenho bodu. Bliie sa o nich dozviete o pr strn alej (kapitola Nevizulne objekty)... No a teraz u sta dopsa iba kd, v ktorom jednm krokom postavme dom. Dorobte do formulru dve tlaidl Button1 a Button2. Najskr dvojkliknite na Button1. Otvor sa vm zdrojov kd a vm zostva zavola procedru Domcek.procedure TForm1.Button1Click(Sender: TObject); begin Domcek(10,30); end;

Pri testovan programu parametre (napr. Domcek(20,50))...

si

mete

sksi

zmeni

Teraz sa vrte sp do formulra (klves F12) a dvojkliknite na tlaidlo Button2. V kde pre zmenu vyuijeme cyklus, ktorm postupne budeme meni parametre procedry :procedure TForm1.Button2Click(Sender: TObject); Var i:Integer; begin For i:=1 To 10 Do Domcek(i*22,i); end;

Spustite V vtvor a vyskajte jednotliv Vsledok by mohol vyzera pribline nejako takto:

tlaidl.

57

Obr. 58 Funknos naej aplikcie...

Vyskajte zmeni parametre...Nie je to sce ni moc, ale na pochopenie procedry s parametrom volanm hodnotou to sta. Vimnite si, e nzvy premennch v hlavike procedry a v programe nemusia by zhodn. Musia by ale rovnakho typu. V prvom prpade (Button1) sme procedru volali s konkrtnymi selnmi dajmi - Domcek(10,30); a v druhom sme vyuili hodnotu premennej i - Domcek(i*22,i);. A ako by to bolo pri parametroch volanch odkazom? Hlavika procedry by vyzerala nasledovne: procedure Domcek (Var X: Integer; Var Y: Integer);. Keby takto procedra hodnoty zmenila a vrtila by takto zmenen hodnoty do alieho spracovania, niekedy by to mohlo vyhovova a niekedy nie. Vyhovujce by to bolo naprklad vtedy, ak by sme chceli sradnice novho domeka pota na zklade sradnc pvodnho domeka (napr. posunutm). Samozrejme, v programe by sme si u nemohli dovoli nieo tak, ako Domcek(10,30); ale iba ak Domcek(A,B); {nemohli by sme poui hodnotu, ale iba premenn}! Doteraz som tu psal iba o procedrach a pritom v nadpise kapitoly s uveden aj funkcie. Tak kam sa vlastne podeli? Nikam! Pretoe vetko, o plat pre procedry plat aj pre funkcie a dokonca nieo navye... Defincia funkcie je v Pascale nasledovn:function MenoFunkcie(formlne parametre):TypFunkcie; {defincia a deklarcia loklnych premennch} begin {telo funkcie} MenoFunkcie:=Hodnota; end;

Isto ste si vimli, e tu pribudla dvojbodka a TypFunkcie. Navye

58

poslednm prkazom funkcie je priraovac prkaz, ktorm priradme funkcii urit hodnotu.

Pri programovan je asto potrebn tzv. faktoril. Neviem, i si na zo kolskej matematiky pamtte, ak nie, tak vedzte, e je to celoseln hodnota, ktor vypotame vynsobenm vetkch celch sel od 1 a po dan n. Oznauje sa to vkrinkom, napr. 4!, ale my to budeme oznaova funkciou Fact. Teda Fact(4) = 1.2.3.4 = 24. Plat tie: Fact(0) = 1; Fact(6) = 720. Pascal tto funkciu nem zabudovan a preto si ju ahko dorobme:Function Fact(X:Byte):Longint; Var i:Byte; Begin Result:=1; If X>0 Then For i:=1 To X Do Result:=Result*i Fact:=Result; End;

Isto sa vm nieo na tomto kde nepi. Tipnem si: zabudol som deklarova premenn Result! Ale nie. Premenn Result deklarova netreba. V Delphi sa toti v kadej funkcii automaticky vytvor premenn s nzvom Result, ktor m tak ist typ ako prslun funkcia. Premenn Result tie v Delphi vyna vsledok. Preto je dokonca predposledn prkaz vo funkcii (Fact:=Result;) v tomto prpade plne zbyton...

Posledne uveden finta v normlnom Pascale, i Turbo Pascale neexistuje, vdy je tam nutn deklarova loklnu premenn prslunho typu a na konci funkcie priradi do nzvu funkcie prslun hodnotu. Volanie funkcie z nadradenho programu sa uskuton zapsanm jej mena na prav stranu priraovacieho prkazu alebo ako parameter inho podprogramu (funkcia toti vdy vrti nejak hodnotu). Prklad volania:X:=Fact(5);

alebo

ShowMessage (IntToStr(Fact(2)));

V Delphi je funkciu mon vola rovnako ako procedru (s tm, e sa zanedb jej nvratov hodnota) ak je zakrtnut voba Extended syntax v menu Project - Options.. v zloke Compiler. 59

Loklne a globlne premenn, problm zatieneniaUrite ste si vimli, e v syntaktickej schme procedry aj funkcie sa nachdza, hne pod hlavikou, riadok defincia a deklarcia loklnych premennch. Take podobne ako v hlavnom programe, i tu sa daj definova a deklarova premenn. Tieto premenn vak meme pouva iba poas innosti prslunho podprogramu - po jeho skonen sa automaticky zlikviduj. Nazvaj sa tie loklne (local variables), pretoe platia iba v loklnej asti - v prslunej procedre, i funkcii. Naproti tomu premenn, ktor s deklarovan v hlavnom programe, i v deklaranej asti unitu meme pouva vade - aj v procedrach, i funkcich podradench. Tieto nes pomenovanie globlne (global variables). o sa vak stane, ke zadeklarujeme globlnu premenn a nsledne v nejakej procedre zadeklarujeme premenn s takm istm menom? Vtedy plat v procedre loklna premenn a globlna akoby neexistovala. Hovorme, e dolo k zatieneniu globlnej premennej loklnou premennou. V defininej a deklaranej asti procedry, i funkcie tie meme loklne definova vlastn dajov typy, procedry a funkcie. Predstavte si naprklad procedru, v ktorej je definovan in procedra, v ktorej je definovan in procedra ... a takto a do 64 kolena. Aj toto umouje Delphi.

Rekurziaalou so zbran silnho kalibru pri tvorbe podprogramov je finta (programtorsk metda), ktor sa nazva rekurzia. V podstate to znamen asi toko, e procedra, i funkcia ete pred svojim ukonenm zavol samu seba. Mete namieta, e takmto spsobom me vznikn nekonen sluka a ja s vami shlasm. Je len na programtorovi, ako tto zbra vyuije. Ako prklad uvediem rekurzvnu funkciu na vpoet faktorilu (jej nerekurzvnu verziu aj s popisom si mete nalistova sptne pri vysvetovan pojmu funkcia).

Elegantn kd (i ke pamovo nronej) funkcie faktoril je mon zapsa rekurzvnym spsobom: 60

Function Fact(X:Byte):Longint; Var i:Byte; Begin If X>1 Then Fact:=X*Fact(X-1) Else Fact:=1; End;

Takto napsan funkcia je prehadn, i ke pre zaiatonka mono aie zrozumiten. Podstatnm je priradenie Fact:=X*Fact(X-1); - tu dochdza k optovnmu zavolaniu tej istej funkcie, ale u so zmenenm vstupnm parametrom X. V pamti sa vytvor nov odkaz na funkciu, t sa vyvol at. a pokm nebude X=1. Potom nastane rekurzvny nvrat a pam sa bude postupne vyisova a do vchodzieho bodu.

Jednou z monost vyuitia rekurzie je tzv. backtracking. Procedra vykonva ist innos, ke sa u ned pokraova, rekurzvne sa vrti a na miesto, kde bude alia monos... Pre zaiatok je to prli zloit - vyuitie je vak mon napr. pri rieen problmov v bludisku, i na achovnici - djde k vyerpaniu vetkch monost.Kee procedry a funkcie s zkladnou stavebnou zlokou vaej budcej aplikcie, otzok a odpoved o nich bude v tejto knike ete vea a vea, ale dovtedy vm doporuujem vypn na chvu pota aj mozog a s preskma algoritmy prrody...

61

lohyAk mte chu zmera si sily s potaom, potom s pre vs pripraven nasledovn jednoduch zadania. Pokia sa vm bud zda prli ak, jednoducho ich odlote na budcnos... 1. Zostrojte funkciu, ktorej vstupom bud tri rzne sla typu Integer. Funkcia nech do programu vrti najvie z nich. 2. Napte procedru, ktor uvatea pozdrav v jeho jazyku (poradov slo jazyka bude parametrom procedry) 3. Napte funkciu ( Function Hviezd(i:Integer):String; ), ktorej vstupom bude reazec zloen z tokch hviezdiiek, ak je vstup funkcie. Naprklad vstupom funkcie Hviezd(10) bude **********. Vstup i vstup riete prostrednctvom editanho okienka Edit. 4. Predchdzajcu funkciu upravte do tvaru Function Hviezd(i:Integer; znak:Char):String;. Funkcia bude vraca reazec z i-znakov - nemusia to by len hviezdiky.. 3. Napte procedru, ktor na formulr nakresl obdnik m x n domekov. Pre nakreslenie domeku vyuite procedru zo zaiatku kapitoly. 4. Prerobte procedru na kreslenie domeka tak, aby ste medzi parametrami zadali aj jeho vekos (nie len sradnice) a nakreslite potom panoramatick pohad na ulicu pln domov (od najmenieho domeku a po najv...) 5. Naprogramujte funkciu, ktor vrti najvieho spolonho delitea dvoch celch sel. Hlavika funkcie me ma nasledovn tvar : Function NSD (A,B: Integer): Integer; Pri vpote mete vyui Euklidov algoritmus. 6. Predchdzajcu lohu skste riei rekurzvne.

62

Zkladn procedry a funkcie DelphiDelphi m priamo vbudovan obrovsk mnostvo prkazov, procedr a funkci. Tieto tvoria vlastn jazyk Object Pascal. Vinu z nich asi nikdy nevyuijete, as je mon programovo vyriei aj inm spsobom, ale bez niekokch sa nezaobdete. U v programoch, ktor ste robili doteraz boli niektor z nich pouit (ShowMessage, IntToStr, InputQuery...), niektor vm mono chbali a hadali ste ich v helpe. V nasledujcich riadkoch vm teda sksim pribli aspo tie najpouvanejie...

Procedry a funkcieOkrem toho, e si sami meme definova vlastn procedry a funkcie, mnoh u za ns vytvorili programtori firmy Borland. Aby bolo zrejm, ak parametre m prslun podprogram, uvediem ich ako pri defincii. Procedry a funkcie bvaj umiestnen v unitoch (ak ich chcete pouva, muste prslun unit uvies v klauzule uses), a preto pri jednotlivch procedrach i funkcich tam, kde je to potrebn uvediem tie nzov prslunho unitu. Unit System v klauzule uses uvdza netreba - tento sa zavedie vdy sm a automaticky.

Procedry a funkcie na prcu s reazcamiReazce znakov (truktrovan typ string) sa vemi asto vyuvaj. Je to toti najjednoduch prostriedok na prcu so slovnmi dajmi. Vetky procedry a funkcie, ktor uvediem s zaveden v jednotke System. function Concat(s1 [, s2,..., sn]: string): string; - vrti reazec vzniknut spojenm reazcov s1, s2,... Je to to ist ako s:=s1+s2+s3... Prklad:S:=Concat('Internet ','Explorer'); { S='Internet Explorer' }.

function Copy(S: string; Index, Count: Integer): string; vrti podreazec z reazca S, ktor sa zana na pozcii Index a m dku Count znakov. Prklad: procedure Delete(var S: string; Index, Count:Integer); -

S:=Copy('Slovensko',2,4); { S='love' }.

63

z reazca S vymae pecifick poet (Count) znakov ponc od znaku na pozcii Index. Prklad:S:='Automobil'; Delete(S,5,2); { S='Autobil' }.

procedure Insert(Source: string; var S: string; Index: Integer); - Vlo podreazec Source do reazca S od pozcie Index. function Length(S: string): Integer; - vrti dku reazca S v znakoch. Tto dku tie mte preta ako nult prvok poa znakov S. Teda Byte(S[0]). function Pos(Substr: string; S: string): Integer; - vrti index prvho vskytu podreazca Substr v reazci S. Prklad: procedure Val(S; var V; var Code: Integer); - konvertuje reazec na slo. procedure Str(X [: Width [: Decimals ]]; var S); - konvertuje slo na reazec.

S:=Star Tur; I:=Pos(r,S); { I=4 }.

Posledn dve procedry maj trochu zloit syntax. S vak zachovan len kvli sptnej kompatibilite. V unite SysUtils vak njdete k tejto problematike vemi pekn funkcie...

function StrToInt(const S: string): prevedie reazec na cel slo.

Integer;

-

priamo

function IntToStr(Value: Integer): string; - sptne prevedie cel slo na reazec.

Ben reazec me obsahova max. 255 znakov. V Delphi vak existuje tie monos prce s dlhmi reazcami a pecilnym typom PChar. Mnostvo procedr a funkci pre ne sa nachdza v unite SysUtils.

Matematick funkcie, aritmetick a logick opertoryNa mnohch miestach programu je treba nieo porovna i vypota a preto treba sem-tam zavta aj do takej hroznej disciplny akou je matematika. Aritmetick opertory asi vetci poznme u zo zkladnej koly - s to +,-,*,/. Mono bud pre

64

vs nov opertory div (celoseln delenie - napr. X:=7 div 2 {3}) a mod (zvyok po celoselnom delen - napr. X:=7 mod 2 {1}). Samozrejme ztvorky maj prednos pred vetkm, nsobenie (*) a delenie (/) m vyiu prioritu ako + a -. Okrem aritmetickch existuj aj logick opertory. Pouvaj sa napr. pri podmienkach. Patria sem and (a sasne), or (alebo), not (opak), xor (nepravdivos), shl (bitov posun vavo) a shr (bitov posun vpravo). No a napokon sme sa dostali aj k tm funkcim. Tie, ktor s vypsan, patria priamo do jednotky System. function Sin(X: Extended): Extended; - vrti snus uhla zadanho v radinoch. function Cos(X: Extended): Extended; - vrti kosnus uhla. function ArcTan(X: Extended): Extended; - vypota arkus tangens sla (rad). function Pi: Extended; vrti Ludolfovo slo 3.1415926535897932385. function Ln(X: Real): Real; - vypota prirodzen logaritmus sla X. function Exp(X: Real): Real; - vrti hodnotu ex, kde e je zklad prirodzenho logaritmu. function Sqr(X: Extended): Extended; - druh mocnina argumentu X. Teda X2=X*X. function Sqrt(X: Extended): Extended; - tak sa pota druh odmocnina. Samozrejme, namiesto typu Extended mete poui aj Real, i in typ, ktor sa sm a automaticky pretypuje function Round(X: Extended): Longint; - zaokrhli desatinn slo na cel slo. function Trunc(X: Extended): Longint; - odsekne z sla desatinn as. function Int(X: Real): Real; - vrti relne slo bez desatinnej asti. function Frac(X: Real): Real; - vrti desatinn as relneho sla.. function Odd(X: Longint): Boolean; - vrti true, ak je X neprne. procedure Inc(var X [; N: Longint ]); - inkrementuje (zv hodnotu premennej o 1, resp. o N. Naprklad Inc(A) je to ist, len efektvnejie ako A:=A+1. procedure Dec(var X [; N: Longint ]); - dekrementuje (zmenuje) hodnotu - opak Inc.

65

procedure Randomize; - inicializuje genertor nhodnch sel. function Random [( Rozsah: Integer)]; - vrti nhodn slo z (0,1) alebo z uvedenho rozsahu.

Mnostvo alch funkci mete njs v unite math.

Funkcie pre prcu so znakmiAk vm skratka ASCII ni nehovor, potom vedzte, e vetky znaky, ktor pouvate s oslovan. Kadmu znaku je teda priraden nejak poradov slo a naopak. function Chr(X: Byte): Char; - vrti znak danho poradovho sla z tabuky ASCII. Napr. Znak:=Chr(65) { vrti psmeno A }. function Ord(X): Longint; - vrti poradov slo ordinrnej premennej X. Napr. pri prci so znakmi Ord(A) vrti islo 65. function UpCase(Ch: Char): Char; - prevedie psmeno na vek.

Procedry a funkcie na prcu so sbormi a adresrmidaje treba asto uloi do sboru, alebo naopak zo sboru preta. Mnoh komponenty maj tto innos zabudovan priamo vo svojich metdach (napr. Memo, i RichEdit). Niekedy je vak potrebn manulna prca s dajmi na disku. procedure AssignFile(var F; FileName: string); - prepoj vntorn premenn typu sbor v Pascale so skutonm sborom na disku. Ak chceme pracova so sbormi na najniej rovni, najskr musme sbor predstavi potau. Vpascale sa na to pouvala procedra Assign. procedure CloseFile(var F); - zru vetky prepojenia medzi premennou F typu sbor a skutonm sborom na disku. Korektne uzatvor sbor. procedure Reset(var F [: File; RecSize: Word ] ); - otvor existujci sbor a nastav sa na jeho zaiatok. Pri netypovom sbore mono zada vekos jednho zznamu. procedure Rewrite(var F: File [; Recsize: Word ] ); - vytvor nov sbor (ak sbor u existoval, vyprzdni ho) a

66

nastav sa na jeho zaiatok. procedure Append(var F: Text); - priprav existujci sbor na zapisovanie dajov na jeho koniec. procedure Read(F , V1 [, V2,...,Vn ] ); - preta poloku zo sboru procedure Write(F, V1,...,Vn); - zape poloku na aktulnu pozciu v sbore asto sa pouvaj varianty ReadLn, resp. WriteLn rovnakho syntaktickho tvaru s tm, e po vykonan innosti odriadkuj (presun kurzor na nov riadok). function Eof(var F): Boolean; - vrti true v prpade, e ukazovate je na poslednej pozcii v prslunom sbore. Inak vracia false. procedure Seek(var F; N: Longint); - presunie ukazovate na prslun pozciu (poloku) v otvorenom sbore function FilePos(var F): Longint; - vrti aktulnu pozciu v sbore procedure Rename(var F; Newname); - premenuje otvoren sbor procedure Erase(var F); - vymae sbor. Najskr ho vak treba zavrie cez CloseFile.

Pre prcu so sbormi uvediem jednoduch prklad ako prekoprova sbor, ktor urte v dialgu OpenDialog1 do sboru, ktorho meno zapete do SaveDialog1. Prslun komponenty (OpenDialog a SaveDialog) njdete na palete Dialogs:procedure TForm1.Button1Click(Sender: TObject); var F1, F2: TextFile; Ch: Char; Begin If OpenDialog1.Execute Then Begin AssignFile(F1, OpenDialog1.Filename); Reset(F1); If SaveDialog1.Execute Then Begin AssignFile(F2, SaveDialog1.Filename); Rewrite(F2); While not Eof(F1) Do Begin Read(F1, Ch); { pretame znak zo sboru F1 ... } Write(F2, Ch); { ... a zapeme ho do sboru F2 } End; CloseFile(F2); End; CloseFile(F1); End; End;

daje

s

v tomto

prklade

tan

a

zapisovan

po

67

jednotlivch znakoch, tandardne sa vak vyuva 128 znakov buffer - prca s diskom teda nie je a natoko pomal. Existuj vak i rchlejie spsoby (napr. vyuitm procedr BlockRead a BlockWrite ...) Vemi ast bvalo (v Pascale) pouitie sborov na uchovvanie zznamov. Takto sbory (ktor uchovvaj daje uritho typu) nazvame typov sbory. (Spoznte ich poda toho, e v deklarcii vystupuje File Of ...) Okrem toho sa pouvaj sbory textov (text) a netypov (file). Sce Delphi m pre prcu so sbormi pripraven mnostvo komponentov (napr. pre prcu s databzami), napriek tomu ned mi nespomen praktick vyuitie jednoduchch procedr umoujcich zpis i tanie dajov v zznamoch... Najskr teda defincia a deklarcia. Predstavte si, e vlastnte vek firmu a vetok software si chcete robi sami. Zhotovte si teda jednoduch databzu, v ktorej budete evidova daje o vaich zamestnancoch (meno a plat) :type TOsoba=record Meno: String; Plat: Real; end; var Sub : File Of TOsoba; Osoba: TOsoba;

No a teraz samotn prca so sborom. Najskr musme sbor otvori a ak existuje (na to sli test funkciou IOResult) , nastavme sa na jeho koniec. Ak neexistuje, meme jednoducho vytvori nov sbor :AssignFile(Sub,'pracanti.dat'); {$I-} Reset(Sub); {$I+} If IOResult0 Then ReWrite(Sub) Else Seek(Sub,FileSize(Sub));

Ke je sbor pripraven na pouitie, meme s nm pracova. Kee sa jedn o sbor typov, meme v jednom kroku preta, i zapsa cel vetu. Na zpis by sme teda pouili procedruWrite(Sub,Osoba);

A

na

tanie

sa

analogicky

pouije

procedra

68

Read(Sub,Osoba). Ak by ste chceli preta vetky daje (a po koniec sboru), vhodn je pouitie sekvencie :While Not EOF(Sub) Do Begin Read(Sub,Osoba); ... { Vpis alebo spracovanie dajov } ... End;

Nezabudnite nakoniec zatvori sbor procedrouCloseFile(Sub);

Okrem prce so sbormi treba niekedy pracova so samotnm diskom. Naprklad sem-tam je potrebn vytvori, i zmaza adresr...

procedure RmDir(S: string); - vymae adresr - tento mus by przdny! procedure MkDir(S: string); - vytvor nov adresr procedure GetDir(D: Byte; var S: string); - vrti nzov aktulneho adresra na prslunom disku D. Napr. 0-aktulny disk, 1-disketa A:, 2disketa B:, 3-harddisk C: procedure ChDir(S: string); - zmen aktulny adresr

Uveden procedry a funkcie s sasou jednotky System. Komfortnejiu prcu umouj niektor procedry a funkcie jednotky SysUtils. Ich kompletn popis njdete op v helpe.

Procedry a funkcie na vstup a vstup dajovPre vstup a vstup dajov v Pascale pod systmom MS DOS sa pouvali procedry ReadLn a WriteLn s tm, e tali, resp. zapisovali zo vstupnho zariadenia (klvesnice) na vstupn zariadenie (monitor). V grafickom rozhran Windows je vak vhodnejie vyui monosti pohodlnho vstupu/vstupu cez komponenty - naprklad Edit, Memo, Label... Ak vm tento spsob nevyhovuje, mete vyui sadu dialgov z jednotky Dialogs: procedure ShowMessage(const Msg: string); - Zobraz jednoduch dialg so sprvou. function MessageDlg(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word; - komfortn ovldanie vpisu sprv.

69

Sprva je dan parametrom Msg, parameter AType udva typ dialgu (mtWarning | mtError | mtInformation | mtConfirmation | mtCustom). V AButtons mete pecifikova tlaidl, ktor chcete zobrazi (mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll) a HelpCtx oznauje kontextov strnku helpu. Funkcia vrti hodnotu poda toho, ak tlaidlo bolo stlaen... Naprklad funkciai:=MessageDlg('Takto me vyzera informan sprva', mtInformation,[mbOK,mbCancel],0);

zobraz nasledovn hlku :

Obr. 58 Pouitie MessageDlg

function MessageDlgPos(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word; funkcia umouje to ist o MessageDlg. Dialg navye mete ubovone umiestni na obrazovku prostrednctvom poslednch dvoch parametrov X,Y. function InputBox(const ACaption, APrompt, ADefault: string): string; - umon vstup dajov prostrednctvom dialgu. Parametre maj nasledovn vznam : titulok boxu, npis vntri boxu, prednastaven reazec. Funkcia vrti reazec, ktor uvate zad do okienka. Naprklad funkcia

Meno:=InputBox('Vstup dajov','Zadajte vae meno :','');

zobraz nasledovn hlku :

Obr. 58 InputBox ako prklad jednoduchho vstupu

70

function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; - vrti hodnotu false, ak bolo stlaen tlatko Cancel alebo ESC. Inak vrti true a v parametri Value zadan vstupn reazec.

Samozrejme, vetky procedry a funkcie Delphi by som nemal ancu vprata do tejto malej kniky. Naznail som vm teda aspo tie najpouvanejie. Je dobr pozna ich a verte, e po dlhom pouvan si ahko zvyknete aj na syntax. Bolo by vak zbyton ui sa ich naspam ak mte k dispozcii help, v ktorom s podrobne popsan. Sta vm naznai prkaz, i procedru v okne zdrojovho kdu, prejs na kurzorom, stlai F1 a zobraz sa vm podrobn popis s odkazmi na alie daje... Ozaj, ke u sme pri tom helpe, musm prizna, e tak dobr help ako je v Delphi 1 som ete nevidel. Troku sa to pokazilo v Delphi 3 ale stle je to vborn pomocnk s mnostvom prkladov (Examples), ktor si hne mete odska. K pouitiu helpu je samozrejme potrebn aspo minimlna znalos anglitiny...

lohyNo, op ste zskali obrovsk mnostvo informci, nemalo by vm u teda robi nejak zvltny problm napsanie akejkovek aplikcie. Skste sa teda pusti do programovania... 1. Napte procedru, ktor vo vstupnom reazci zamen vetky psmen a za b. 2. V budcnosti sa vm isto zde procedra alebo funkcia, ktor vo vstupnom reazci zamen vetky psmen za vek. Zostrojte ju. (Ona u sce existuje v unite SysUtils a nazva sa UpperCase, ale skste si ju napsa sami...) 3. Zostrojte aplikciu, ktor zo zadanej vety vyberie vetky slov a vype ich za sebou naprklad prostrednctvom ShowMessage v abecednom usporiadan. 4. Dorobte funkcie tg(x) a cotg(x), ktor v systme chbaj. 5. Pamtte si ete na Pytagorovu vetu (Obsah tvorca zostrojenho nad preponou pravouhlho trojuholnka sa rovn stu obsahov tvorcov zostrojench nad oboma jeho odvesnami)? Zhotovte aplikciu, ktor pri zadan dvoch

71

6. 7. 8. 9.

strn trojuholnka (a nastaven, i sa jedn o 2 odvesny alebo preponu a odvesnu) vypota tretiu. Pamtajte, e kad trojuholnk m dve odvesny, zvierajce prav uhol a oproti nim je prepona. Naprogramujte nhodn hru v kocky (pouijete funkcie Randomize a Random). Napte program, ktor bude za vs vypa tikety portky. A aby ste si vae tipy pamtali aj po rokoch, ukladajte ich do sboru... Prerobte lohu 2 takm spsobom, aby vstup i vstup bol tvoren sborom. Ponechajte si vak aj pvodn rieenie. Skste dokoni prklad o evidencii dajov o mench a platoch pre vaich zamestnancov. Na vstup a vstup dajov pouite InputBox, resp. ShowMessage. Nezabudnite, e pri natavan do zznamu muste poui bodku. Naprklad Osoba.Meno:=InputBox(Vstup,Meno :,); Alebo skste vyui prkaz With...

72

Objekty a triedy - zklady pevnej aplikcieKad dom mus ma pevn zklad (najlepie z betnu). A podobne je to i s programovacmi jazykmi. V Delphi plat analgia so zkladom domu ete zrejmejia. Zkladnm kameom s tu typy TObject a TClass - z tchto typov sa odvjaj vetky komponenty (i u vizulne alebo nevizulne). Mono si spomeniete na kapitolu o truktrovanch dajovch typoch. Popsal som reazec (string), pole (array), zznam (record) a naznail som, e s ostatnmi sa stretneme v budcnosti. Tak a teraz nastva t vhodn doba na popsanie objektu (object) a triedy (class). Kee ich vzjomn odlinos na prv pohad ako postrehnete (zjednoduene povedan trieda = objekt), budeme sa venova najm triedam. Napokon triedy njdete v Delphi doslovne na kadom kroku... Trieda (class) je truktrovan typ podobn zznamu (record), okrem dajovch pol vak navye obsahuje metdy (procedry, ktor je mon s objektom vykonva) a vlastnosti. Je nepsanm tandardom, e defincie vetkch tried sa zanaj psmenom T (napr. TEdit, TButton). dajov polia (fields) sa zapisuj rovnako ako v zzname slia na uchovvanie nehomognnych dajov. Mono si ich predstavi ako premenn, ktor uchovvaj pre triedu hodnoty. Metdy (methods) s procedry a funkcie, ktor s dajmi pracuj. Dve pecilne metdy - kontruktor (constructor) a detruktor (destructor) sa pouvaj na rezervovanie, resp. vyistenie pamte pre objekt. A napokon vlastnosti (properties) s prstupovmi cestami k dajom alebo metdam triedy. Triedy sa musia vdy zadefinova - v defininej asti unitu. Nsledne je potrebn dodefinova metdy (kontruktor, detruktor, procedry a funkcie). Pri kadom vytvran projektu sa automaticky vytvor trieda (alebo objekt) spt z formulrom. Naprklad ak formulr obsahuje jedno tlaidlo a metdu kliknutia na (dostanete ju, ke na formulri dvojkliknete na tlaidlo button1), defincia (s malmi okrleniami) bude vyzera nasledovne:type TForm1 = class(TForm){ Defincia typu TForm1 ako trieda, ktor zded vlastnosti

73

od pvodnho typu Tform (zkladn objekt, v ktorom je popsan przdny formulr). Formulr obsahuje jednu dajov poloku (tlaidlo) a jednu metdu (procedru kliknutia) }

Button1: TButton; procedure Button1Click(Sender: TObject); private{ Private declarations - tu deklarujeme vlastn skromn premenn a metdy. Tieto nebud prstupn dediom - pozri alej} { Public declarations - sem dme verejn deklarcie pemenn, ku ktorm m prstup kad odvoden trieda prp. in objekt inej triedy}

public

end; var Form1: TForm1;{ Formulr samozrejme musme zadeklarova! Doposia existuje len typ - popis. Na to aby sme mohli pouva metdy a premenn, potrebujeme vytvori objekt, ktor trieda popisuje - tu sme vytvorili statick objekt - deklarovanm, no mono vytvori aj objekt dynamick - poas behu programu.}

implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('akujem za kliknutie!'); end;

{ treba dodefinova naznaen metdy - dopsa kd, ktor sa vykon po kliknut na Button1 }

Rovnako ako pri zzname (record), i tu plat pravidlo pouitia bodky pri prstupe k dajom, i metdam triedy zvonku (TForm1.Button1Click).

Metdy, vlastnosti a udalostiV tejto asti sa poksim poveda o-to o zkladnch monostiach prce s komponentmi (i u vizulnymi - z palety nstrojov, alebo nevizulnymi - skrytmi). Kad komponent m svoje dajov poloky, svoje vlastnosti a metdy na prcu s nimi. Navye tu vystupuj udalosti, pri ktorch dochdza k nejakm zmenm (sprvy Windows)... - vlastnosti (properties) je mon nastavi priamo cez Object Inspector (F11) alebo v prslunom zdrojovom kde. - metdy (methods) s procedry a funkcie spt s danm

74

objektom. Je ich mon spusti volanm v zdrojovom kde. Samozrejme, pokia chcete zavola metdu inho objektu, muste poui meno objektu a bodku (napr. Form1.Close). - udalosti (events) s akcie, ktor mu nasta pri prci s prslunm komponentom. Udalosou me by naprklad pohyb myi, stlaenie klvesy, i maximalizcia okna. Windows na kad udalos zareaguje poslanm sprvy (message) a nsledne odovzd riadenie prslunej procedre (ak existuje). V Delphi sa udalosti nastavuj v okne Object Inspector na zloke Events. V predchdzajcom texte sme u pouvali udalos OnClick, ke stailo dvojklikn na prslun tlaidlo (Button) a udalos sa nastavila sama. OnClick je vak len jednou z mnohch udalost, ktor mete pre objekty nastavi.

Zostrojme okno, ktor pri stlaen klvesu z klvesnice zobraz dialg, v ktorom bude vypsan slo prslunho klvesu.Pri rieen sta vytvori nov aplikciu a priamo pre formulr sa prepn v Object Inspectore na zloku udalost (events). Z udalost vyberte OnKeyDown a bu do prslunho riadku dopte nzov procedry, alebo iba dvojkliknite veda OnKeyDown myou. Dostanete sa do zdrojovho kdu, kde je u pre vs pripraven hlavika prslunej procedry. Sta len dopsa kd...procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin ShowMessage('Stlaili ste klves s slom ' +IntToStr(Key)+'!!!'); end;

Obr. 58 Pri stlaen Alt..

Na mojej klvesnici Chicony Win95 mi naprklad prav Alt hlsi tak ist

75

hodnotu ako Ctrl. Dal som si vypsa aj Shiftov stavy a vstup programu pri stlaen pravho Alt bol tak, ako vidte na obrzku. Dfam, e sa vm bez problmov podarilo prslun udalos nastavi. Doporuujem vyska si, o ktor udalosti robia - nielen pre formulr, ale pre vetky komponenty.

Udalos je nastaven pre formulr TForm1.FormKeyDown. Pokia by ste mali vo formulri viac objektov, a pri stlaen klvesu by ste boli aktulne nastaven na inom objekte, procedra sa nevykon!!! al jednoduch prklad som zhotovil z pohodlnosti. Na formulr som vloil komponent tlaidlo (button) a chcel som, aby sa cel okno maximalizovalo, resp. normalizovalo vtedy, ke sa myou o i len pohnem nad toto tlaidlo (take netreba ani klikn). Rieenie je vemi jednoduch. Sta vybra z udalost (events) pre tlaidlo t, ktor sa aktivuje pri phom pohybe myi nad komponentom -OnMouseMove. Nsledne som zneuil vlastnos WindowState formulra (reprezentuje momentlny stav okna - normlne, maximalizovan alebo minimalizovan)procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin If WindowState=wsMaximized Then WindowState:=wsNormal Else WindowState:=wsMaximized; end;

Ke som s Delphi zanal, nevedel som prs na prepojenie prslunch udalost a kdu. Teraz u viem, e vetko je zapsan v prslunom formulri (sbore *.dfm). Ben programtor sa vak o tieto veci zaujma nemus - vetko je predsa mon vizulne nastavi aj skontrolova - sta len klikn v Object Inspectore na udalosti (events)...

V prpade, e vo formulri koprujete objekt, skoprujete ho so vetkmi vlastnosami aj udalosami!!! Niekedy je to vhodn, ale obas (ak na to zabudnete) me takto postup vies k nevysvetlitenmu sprvaniu sa programu. 76

Predstavte si, e vo svojej aplikcii potrebujete ponknu uvateovi monos vytvrania adresra. Nech uvate zape nzov adresra naprklad do editanho polka a tlaidlo vytvorenia adresra sa umon stlai iba v prpade, e nzov vyhovuje prslunm konvencim DOSu (neme obsahova medzeru, ani iarku, bodku, i diakritick symboly). V prvom rade si pripravte nov aplikciu a na formulr umiestnite prslun komponenty z palety Standard (spoznali ste ich u v vodnch kapitolch). Nastavte im prslun vlastnosti : Nzov editanho polka (vlastnos Name v okne Object Inspector) bude edAdresar a nzvy jednotlivch tlaidiel bud btVytvor a btZatvor. Napokon pomenujte aj formulr (naprklad na frmAdresar). Samozrejme, nezabudnite tie nastavi prslun titulky (vlastnos Caption).

Obr. 58 Formulr pre vytvranie adresrov

Dleit je tie vyisti vlastnos text komponentu edAdresar. Ak by vak v tomto momente uvate aplikciu spustil, mal by prstup aj k tlaidlu btVytvor (przdny reazec v polku edAdresar vak nie je vhodnm nzvom adresra...) Preto muste nastavi vlastnos Enabled pre tlaidlo btVytvor na hodnotu False. vlastnostiam, i udalostiam nerozumiete, vrte sa ku kapitole Zkladn vlastnosti vizulnych komponentov na zaiatku kniky. Vizulna interpretcia je hotov - meme prejs ku kdu. Prejdite na editan polko edAdresar a v okne Object Inspector sa prestavte na zloku Events - pjdeme pripravova udalosti. Njdite si riadok, v ktorom je napsan OnChange a do przdneho polka vpte nzov procedry (naprklad Zmena). Udalos OnChange sa vyvol vdy pri zmene textu...

Ak nie ste znalcami v programtorskej anglitine a niektorm

77

Obr. 58 Nastavenie udalost Po stlaen klvesu ENTER sa dostanete do kdu, v ktorom je u pre vs pripraven hlavika procedry. Chcete testova, i text uveden v edAdresar vyhovuje prslunm podmienkam... Netrpte sa so pecilnymi prpadmi, sta ke pouijete funkciu IsValidIdent, ktor zist, i by nzov mohol by pouit ako identifiktor (nzov) premennej i funkcie v Delphi...procedure TfrmAdresar.Zmena(Sender: TObject); begin If IsValidIdent(edAdresar.Text) Then btVytvor.Enabled:=True Else btVytvor.Enabled:=False; end;

... Ak no, potom sa povol stlaenie tlaidla btVytvor, v opanom prpade sa tlaidlo zake. Ete chba hlavn innos programu - teda samotn vytvranie adresra. Prepnite sa op do formulra (F12), prejdite na tlaidlo btVytvor a v Object Inspectore nastavte pre udalos OnClick procedru VytvorAdresar. Analogicky vytvorte procedru ZatvorOkno. Dopete kd a je to...procedure TfrmAdresar.VytvorAdresar(Sender: TObject); begin MkDir(edAdresar.Text); end; procedure TfrmAdresar.ZatvorOkno(Sender: TObject); begin Close; { Alebo konkrtne ftmAdresar.Close } end;

Ak by ste pri nastavovan procedr pre udalosti iba dvojklikli na przdne miesto veda prslunej udalosti, zvol sa tandardn nzov (naprklad Button1Click). Ak chcete nastavi nejak procedru ako spolon reakciu na viacer udalosti, sta vm klikn na rozbaovaciu 78

pku veda prslunej udalosti v Object Inspectore. Samozrejme, mus sa jedna o udalosti, ktor maj poiadavky na plne rovnak parametre procedry...

79

Dleit komponenty a triedyNa zaiatku tejto kniky ste sa mohli oboznmi so zkladnmi vizulnymi komponentmi Delphi prstupnmi z palety Standard. (Form, Button, Label, Edit, Memo). Okrem nich vak mete vyuva obrovsk mnostvo alch komponentov, i u vizulnych alebo aj nevizulnych. Aby som dokonil rozprvanie o vizulnych komponentoch, mete si o nich preta tak, ako ich njdete na jednotlivch zlokch na paneli nstrojov. Najskr sa vak ete vrtim k najpouvanejiemu komponentu, ktor sa nachdza v kadej vizulnej aplikcii aspo jeden ...

Formulre (MDI versus SDI)Formulr (form) je zkladnou stavebnou plochou, na ktorej mete zaa stava pomocou komponentov vau budcu aplikciu. Vytvor sa vdy po vytvoren novej aplikcie z menu, alebo po zvolen ikony Nov formulr. Laicky by sme ho mohli nazva pojmom okno. A kee Windows s zloen zo samch okien, vrme sa k nemu ete na skok. Na zaiatku kniky som hovoril, e neskr vm prezradm nieo viac o MDI a SDI formulroch a tak teraz plnm svoj sub : Zkladn dva druhy aplikanch okien s MDI (multiple document interface) a SDI (single document interface). Zkladom MDI aplikcie je rodiovsk okno (parent window), v ktorom s umiestnen menie - detsk okn (child windows). Rozdielom oproti SDI aplikcii je, e detskch okien me by v rodiovskom otvorench viac a nemu (logicky) presiahnu za jeho hranice. Typickm prkladom MDI aplikcie je napr. textov editor MS Word alebo Sprvca programov (Program manager) vo Windows 3.x.

80

Obr. 58 Okn MDI aplikcie (Text editor) a SDI aplikcie (Poznmkov blok)

SDI aplikcia sa sklad z viacerch nezvislch okien (asto len z jednho). Ako prklad me posli Kalkulaka, i samotn prostredie Delphi 3.0. In@, v dobe Windows 95/98 sa dostvaj skr do popredia aplikcie SDI - pohodlnejie je toti prepn sa medzi aplikciami cez hlavn panel ako sa prepna v jednej aplikcii medzi viacermi dokumentami. Ono je to sce pohodlnejie, ale pamovo ovea nronejie! Ja preto v tejto oblasti nezdieam doporuenia Microsoftu a ovea radej pouvam aplikcie MDI...

Zloka StandardO niektorch komponentoch u viete z vodnch ast kniky, preto len zhrniem ... V ztvorke za nzvom je uveden unit, v ktorom je prslun trieda pre objekt definovan).

TLabel (unit stdctrls) - pouva sa na zobrazenie pevnch textov na formulri. TEdit (unit stdctrls) - jednoriadkov editor - prevane vyuvan na vstup dajov. TMemo (unit stdctrls) - viacriadkov editor s obmedzenm do 64 kB. TButton (unit stdctrls) - tandardn tlaidlo pouvan naprklad na potvrdenie akcie.

almi komponentmi zloky Standard s

81

Zakrtvacie polko (check box) a rdiov tlaidlo (radio button)Najm v dialgovch oknch s asto vyuvanmi nstrojmi zakrtvacie polko (check box) a rdiov tlaidlo (radio button) . Check box sa nachdza na miestach, kde treba oznai i odznai urit poloku. Rdiov tlaidlo njde svoje vyuitie najm tam, kde je treba vybra si z viacerch ponknutch monost prve jednu.

Jednoduchm spsobom meme zostroji aplikciu, ktor pome totlnemu programtorovi v problematike, o si m obliec na von. Samozrejme, uvate bude potrebova nejak informcie o poas, preto si pripravte nasledovn formulr :

Obr. 58 Urenie obleenia pre totlneho programtora

Komponent v hornej asti je textov pole (label). Pod nm s tri rdiov tlaidl s nasledovnmi menami (vlastnos Name v okne Object Inspector) : rbTeplota1, rbTeplota2, rbTeplota3. Pre kad radio button nastavte prslun npis (vlastnos Caption) poda obrzka. Do spodnej asti okna vlote dve zakrtvacie polka, ktor nazvete chPrsi a chSnezi. Op nastavte ich titulok (vlastnos Caption) na &Pr, resp. &Sne.

Ak umiestnite v titulku znak &, nasledujce psmeno bude podiarknut (napr. &Pr = Pr). Poas behu programu sa k tomuto komponentu rchlo dostanete stlaenm kombincie Alt+poiarknut znak (v tomto prpade Alt+P).Doplte na formulr jedno tlaidlo (nazvite ho napr. btTlacidlo) a nastavte mu titulok na hodnotu Cho &von. Napokon nezabudnite na poznmkov blok (memo), ktor mte umiestni do pravej asti okna. Nazvite ho jednoducho

82

Oblecenie. Nezabudnite aj na samotn formulr. Pomenujte ho (naprklad frmOblecenie a nastavte nu titilok (Caption) poda obrzku. Vimnite si teraz jednu nov vlastnos pre rdiov tlaidlo alebo zakrtvacie polko : jedn sa o vlastnos checked. Mte ju nastavi len na hodnoty True (pravda) alebo False (nepravda) pomocou pky napravo od aktulnej hodnoty. Nastavte naprklad vlastnos Checked pre komponent rbTeplota2 na True. Vidte, e krok prslunho rdiovho tlaidla sa vyplnil. A teraz nastavte Checked na hodnotu True pre rbTeplota1. Vyplnen krok preiel do prvho radio buttonu a ostatn s nevyplnen. Hodnotu True teda me ma iba jedno rdiov tlaidlo na formulri (ak chcete zostroji aliu nezvisl skupinu rdiovch tlaidiel, muste ich umiestni do GroupBoxu alebo Panelu prpadne vyuite RadioGroup). Inak je to vak pri zakrtvacom polku : akkovek daj me by zakrtnut alebo nezakrtnut. Mete si to vyska ako pri nvrhu - v Object Inspectore, tak i pri samotnom behu aplikcie (po spusten - Run). Aby bola aplikcia funkn, treba ete dopsa pr riadkov zdrojovho kdu. Prejdite teda op na formulr a dvojkliknite na tlaidlo. Automaticky tm pripravte podprogram (procedru), ktor bude reakciou na udalos onClick. V zdrojovom kde sa teda prichyst procedra, do ktorej medzi begin a end dopete nasledovn kd :procedure TfrmOblecenie.btTlacitkoClick(Sender: TObject); begin Oblecenie.Text:='Dnes si na von nezabudni zobra :'; If rbTeplota1.Checked Then Oblecenie.Lines.Add('rukavice, iapku, l'); If rbTeplota2.Checked Then Oblecenie.Lines.Add('koeu, nohavice, tenisky'); If rbTeplota3.Checked Then Oblecenie.Lines.Add('plavky, sombrro'); If chPrsi.Checked Then Oblecenie.Lines.Add('ddnik') Else Oblecenie.Lines.Add('opaov. krm'); If chSnezi.Checked Then Oblecenie.Lines.Add('lye'); end;

Vimnite si prkaz If, ktor umouje vetvi program. Ak je podmienka (v tomto prpade vlastnos Checked) splnen,

83

program pokrauje prkazmi v asti Then, inak sa prevedie obsah nepovinnej asti Else. Vpisy ste mohli riei aj formou MessageBoxu, takto je to vak efektvnejie. Po spenom naprogramovan aplikciu spustite a vyskajte. Ja len dfam, e sa nikdy nestanete totlnymi programtormi, ktor by tto aplikciu skutone vyuvali...

Zoznam (list box) a otvrac zoznam (Combo box)Zoznam (list box) je, ako to u jeho nzov napoved zoradenm homognnych (rovnorodch) dajov do jednho stpca. Z tchto dajov je mon myou vybra bu jeden, alebo viacero - poda nastavenia vlastnost zoznamu. Urite ste sa u so zoznamom stretli - napr. pri vbere sboru v klasickom otvracom dialgu. Komponent vemi podobn zoznamu je Combo box . Combo box mete vidie napr. v textovom editore MS Word, i WordPad (z prsluenstva Windows) pri vbere typu psma (fontu), alebo priamo v Delphi na mnohch miestach okna Object Inspector. ast uplatnenie tohto nstroja je aj v oblasti databzovch systmov.

Na ukku vyuitia tchto dvoch komponentov me vemi dobre posli jednoduch zoznam priateov. Napanie mete uskutoni a v spustenej aplikcii, alebo u pri vizulnom nvrhu. Pripravte si teda nasledovn formulr :

Obr. 58 Jednoduch prklad zoznamu a otvracieho zoznamu

Vinu komponentov u poznte, novinkou bude pre vs zoznam (list box) v pravej asti okna a otvrac zoznam (combo box) pod textom Vekos.

84

U znmym spsobom vlote do formulra potrebn komponenty a nastavte im prslun vlastnosti. Editan okienko nazvite edMeno, prv tlaidlo btPridaj, druh btOdober. Zoznam (list box) na pravej strane pomenujte lbZoznam a otvrac zoznam pod textom Vekos nazvite cbVelkost. Nezabudnite pokrsti spodn label na lblNapis v programe budete meni jeho titulok (Caption) a vekos (Font.Size). Zoznam na pravej strane zatia ponechajte przdny, ale ak chcete, mete vyplni otvrac zoznam (Combo box). Prejdite teda na jeho vlastnos Items a kliknite na tri bodky veda (TS