14. Formulß°e I
  1. Nejjednodu╣╣φ zp∙sob zobrazenφ zprßvy pro u╛ivatele je pou╛itφ okna zprßv, kterΘ zobrazφme funkcφ ShowMessage. Ukß╛eme si to na nßsledujφcφ aplikaci: Vytvo°φme nov² projekt a na formulß° umφstφme tlaΦφtko. Do obsluhy udßlosti OnClick tlaΦφtka zapφ╣eme nßsledujφcφ k≤d:

  2. ShowMessage("C++ Builder vßs zdravφ");
    Aplikaci spustφme a po stisku tlaΦφtka je zobrazeno okno zprßv se zadan²m textem.
  3. Metoda MessageDlg zobrazuje okno zprßv uprost°ed obrazovky. Toto okno zprßv zobrazuje text zprßvy, titulek, ikonu a tlaΦφtka. Metoda mß Φty°i parametry: Prvnφ parametr urΦuje text zprßvy, druh² typ okna (titulek a ikonu okna), t°etφ zobrazenß tlaΦφtka v okn∞ a poslednφ kontext nßpov∞dy (co bude zobrazeno p°i stisku tlaΦφtka Help nebo klßvesy F1).

  4. Druh² parametr je v²ΦtovΘho typu a mo╛nΘ hodnoty jsou: mtWarning (varovßnφ), mtError (chyba), mtInformation (informace), mtConfirmation (potvrzenφ) a mtCustom (u╛ivatelsk² typ). Tyto hodnoty urΦujφ typ okna, tj. titulek a ikonu okna. T°etφ parametr (pou╛itß tlaΦφtka) je mno╛ina typu TMsgDlgButtons s mo╛n²mi hodnotami: mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore a mbAll. Jestli╛e nechceme pou╛φvat kontext nßpov∞dy, pak poslednφ parametr bude mφt nulovou hodnotu.
    Pou╛itφ si ukß╛eme na nßsledujφcφm p°φkladu. Vytvo°φme novou aplikaci s tlaΦφtkem. Obsluha stisku tlaΦφtka bude tvo°ena p°φkazem:
    MessageDlg("Jsi tam?", mtConfirmation,
               TMsgDlgButtons() << mbYes << mbNo, 0);
    Aplikace je hotova a m∙╛eme ji vyzkou╣et. Vyzkou╣ejte, jak se projevφ zm∞na druhΘho parametru na vzhledu okna zprßv. Pokuste se takΘ zm∞nit zobrazenß tlaΦφtka.
  5. Ve v∞t╣in∞ p°φpad∙ ale budeme chtφt zjistit, kter²m tlaΦφtkem bylo okno uzav°eno (je mo╛no zjistit z vrßcenΘ hodnoty). Mo╛nΘ vrßcenΘ hodnoty jsou: mrNone, mrAbort, mrYes, mrNo, mrOK, mrRetry, mrCancel, mrIgnore a mrAll. Ukß╛eme si to na p°φkladu. V p°edchozφm zadßmφ zm∞nφme obsluhu stisku tlaΦφtka takto:

  6. switch (MessageDlg("Chce╣ ukonΦit aplikaci?", mtConfirmation,
                       TMsgDlgButtons() << mbYes << mbNo, 0)){
      case mrYes:
        MessageDlg("UkonΦenφ aplikace.", mtInformation,
                   TMsgDlgButtons() << mbOK, 0);
        Close();
        break;
      case mrNo:
        MessageDlg("Aplikace pokraΦuje v prßci.", mtInformation,
                   TMsgDlgButtons() << mbOK, 0);
    }
    Vyzkou╣ejte.
  7. Existuje takΘ metoda MessageDlgPos, kterß se od MessageDlg li╣φ pouze tφm, ╛e mß o dva parametry vφce. Tyto parametry (jsou poslednφ) urΦujφ sou°adnice zobrazenφ okna zprßv.
  8. Na nßsledujφcφ aplikaci si ukß╛eme, jak C++ Builder pou╛φvß jednotky formulß°∙. Vytvo°φme jednoduchou aplikaci, kterß zobrazφ druhΘ okno, kdy╛ stiskneme tlaΦφtko. ZaΦneme vytvß°et novou aplikaci volbou File | New Aplication. U formulß°e zm∞nφme vlastnost Name na HlavniFormular a vlastnost Caption na Testovacφ program s vφce formulß°i. Ulo╛φme projekt (jednotku nazveme Hlavni a projekt ViceForm). Na formulß° nynφ umφstφme tlaΦφtko. Zm∞nφme jeho Name na ZobrazForm2 a Caption na Zobraz druh² formulß°.

  9. K vytvo°enφ novΘho formulß°e zvolφme File | New Form. Nov² formulß° je umφst∞n nad na╣im p∙vodnφm formulß°em (mß stejnΘ rozm∞ry). My ale budeme pot°ebovat men╣φ formulß°. Zmen╣φme tedy jeho rozm∞ry asi na polovinu a umφstφme jej doprost°ed hlavnφho formulß°e. U novΘho formulß°e zm∞nφme vlastnost Name na DruhyForm a vlastnost Caption na Druh² formulß°. Zvolφme File | Save a ulo╛φme druh² formulß° pod jmΘnem Druhy.
    Na druh² formulß° umφstφme doprost°ed je╣t∞ komponentu Label. U tΘto komponenty zm∞nφme vlastnost Caption na Toto je druh² formulß° a tento text nechßme zobrazovat v∞t╣φm a barevn²m pφsmem.
    Klikneme na hlavnφ formulß° a dvojit∞ klikneme na tlaΦφtko (budeme vytvß°et jeho obsluhu). Obsluha tlaΦφtka bude tvo°ena p°φkazem:
    DruhyForm->ShowModal();
    Kdy╛ nynφ spustφme program, pak p°ekladaΦ nßm oznamuje, ╛e nalezl nedefinovan² symbol DruhyForm. Toto je ale nß╣ druh² formulß°. Mßme nynφ dva zdrojovΘ soubory, ka╛d² s hlaviΦkov²m souborem. ProblΘm je ten, ╛e jednotka Hlavni nevidφ deklaraci (hlaviΦkov² soubor) jednotky Druhy. Kdy╛ se podφvßme na zaΦßtek jednotky Hlavni, pak vidφme tyto °ßdky:
    #include <vcl.h>
    #pragma hdrstop
    #include "Hlavni.h"
    //--------------------------------------------------------------
    Vidφme zde pou╛itφ #include "Hlavni.h", ale nikde nevklßdßme hlaviΦkov² soubor Druhy.h. Je zapot°ebφ zvolit File | Include Unit Hdr, Φφm╛ zobrazφme dialogovΘ okno Include Unit. V okn∞ vidφme seznam dostupn²ch jednotek. V tomto dialogovΘm okn∞ se zobrazujφ pouze jednotky, kterΘ existujφ v projektu a nejsou je╣t∞ vlo╛eny do aktußlnφ jednotky. Ji╛ vlo╛enΘ jednotky zde nejsou uvßd∞ny. V na╣em p°φpad∞ je zde pouze jednotka Druhy. Vybereme ji a stiskneme OK. Kdy╛ se podφvßme na zaΦßtek jednotky Hlavni, pak zde vidφme:
    #include <vcl.h>
    #pragma hdrstop
    #include "Hlavni.h"
    #include "Druhy.h"
    //--------------------------------------------------------------
    Nynφ je ji╛ v╣e v po°ßdku, aplikaci m∙╛eme vyzkou╣et. Projekt si ulo╛te, budeme jej je╣t∞ pot°ebovat.
    P°i prßci s vφce formulß°i je pouze zapot°ebφ pomocφ volby File | Include Unit Hdr zajistit vlo╛enφ hlaviΦkov²ch soubor∙ jednotek na kterΘ se odkazujeme do zdrojov²ch jednotek formulß°e, ze kter²ch se odkazujeme.
  10. Dßle se budeme zab²vat p°ekladem a sestavovßnφm projekt∙ v C++ Builderu. P°i ka╛dΘ volb∞ Run | Run C++ Builder p°eklßdß a sestavuje nß╣ program. Nejsou ale p°eklßdßny v╣echny jednotky projektu, ale pouze ty z nich, kterΘ byly zm∞n∞ny od poslednφho p°ekladu. Toto zkracuje dobu trvßnφ p°ekladu. Informace o tom, kterΘ jednotky byly zm∞n∞ny jsou udr╛ovßny automaticky C++ Builderem. Ne v╛dy ale chceme program spou╣t∞t. Nap°. m∙╛eme chtφt program pouze p°elo╛it, abychom v∞d∞li, zda v n∞m nejsou chyby. C++ Builder mß v nabφdce Project t°i volby (Compile Unit, Make a Build), kterΘ lze pou╛φt pro p°eklad programu (jsou zde dal╣φ volby pro p°eklad skupiny projekt∙, ale t∞mi se zatφm nebudeme zab²vat).

  11. Volba Project | Compile Unit zp∙sobφ p°eklad jednotky prßv∞ zobrazenΘ v Editoru k≤du a v²pis v╣ech chyb a varovßnφ. Je to nejrychlej╣φ zp∙sob testovßnφ na╣eho programu na chyby. Provßdφ se pouze p°eklad (bez sestavovßnφ). Volba Project | Make p°eklßdß v╣echny jednotky zm∞n∞nΘ od poslednφho p°ekladu a takΘ sestavuje cel² projekt. Prvnφ sestavenφ projektu trvß dΘle ne╛ dal╣φ sestavenφ. To proto, ╛e inkrementaΦnφ sestavovacφ program vytvß°φ v╣echny pot°ebnΘ soubory, kterΘ jsou pak pou╛φvßny pro zkrßcenφ dal╣φch sestavovßnφ. Volba Project | Build trvß nejdΘle. Jsou p°elo╛eny v╣echny jednotky projektu. Po p°ekladu v╣ech jednotek je cel² projekt sestaven. Tento p°φkaz je pou╛φvßn pouze v²jimeΦn∞, nap°. po editaci vytvß°ecφho souboru projektu. Je vhodnΘ jej takΘ pou╛φt p°i v²skytu r∙zn²ch nedefinovan²ch chyb.
  12. Formulß°e m∙╛eme rozd∞lit do n∞kolika skupin. Formulß°e jsou hlavnφmi vytvß°ecφmi bloky aplikacφ C++ Builderu. Ka╛dß aplikace GUI mß alespo≥ jeden formulß°, kter² slou╛φ jako hlavnφ okno. Hlavnφ okno m∙╛e b²t prßzdnΘ, m∙╛e b²t zapln∞no ovladaΦi nebo m∙╛e mφt na sob∞ zobrazenou bitovou mapu. Hlavnφ okno b²vß v∞t╣inou vybaveno nabφdkou a m∙╛e mφt takΘ stavov² °ßdek a paletu nßstroj∙. Hlavnφ okna r∙zn²ch aplikacφ se mohou velmi li╣it.
  13. R∙znß dialogovß okna pou╛φvanß v aplikacφch C++ Builderu jsou takΘ formulß°e. Dialogovß okna se obvykle od normßlnφch oken v n∞kter²ch v∞cech li╣φ:
  14. Dialogovß okna v C++ Builderu se li╣φ od dialogov²ch oken v jin²ch programovacφch prost°edφch. V jin²ch programovacφch prost°edφch jsou dialogovß okna vytvß°ena Editorem dialogov²ch oken. V mnoha p°φpadech Editor dialogov²ch oken je vizußlnφ nßstroj, kter² pracuje podobn∞ jako Nßvrhov² formulß° C++ Builderu. Vytvo°enΘ dialogovΘ okno je zde definovßno skriptem souboru zdroj∙.
    Dialogovß okna v C++ Builderu jsou normßlnφ formulß°e. K zabrßn∞nφ zm∞ny velikosti okna zm∞nφme vlastnost BorderStyle na bsDialog nebo bsSingle. Pokud pou╛ijeme bsDialog, pak dialogovΘ okno bude mφt na titulnφm °ßdku pouze uzavφracφ tlaΦφtko. V╣echny formulß°e C++ Builderu majφ podporu pro p°echod na dal╣φ ovladaΦ p°i stisku klßvesy Tab.
    Dialogovß okna C++ Builderu mohou b²t modßlnφ nebo nemodßlnφ. Modßlnφ dialogovΘ okno musφ b²t uzav°eno d°φve, ne╛ u╛ivatel m∙╛e pokraΦovat v pou╛φvßnφ aplikace (pokud je modßlnφ okno otev°eno, pak zb²vajφcφ Φßst aplikace je nefunkΦnφ). P°i nemodßlnφm dialogovΘm oknu, je mo╛no pracovat v tomto okn∞ a takΘ ve zb²vajφcφ Φßsti aplikace. To zda dialogovΘ okno se bude chovat jako modßlnφ nebo nemodßlnφ je urΦeno tφm, zda okno je zobrazeno metodou ShowModal (modßlnφ) nebo Show (nemodßlnφ).
  15. Nynφ se vrßtφme k na╣emu projektu ViceForm (zobrazovßnφ druhΘho formulß°e). K tomuto projektu p°idßme okno O aplikaci. Pokud tento projekt ji╛ nemßme otev°en, pak jej otev°eme volbou File | Open Project. K otev°enφ lze takΘ pou╛φt volbu File | Reopen (zobrazφme seznam nejposledn∞ji pou╛φvan²ch projekt∙ a soubor∙, ze kterΘho si m∙╛eme otevφran² projekt vybrat; seznam mß dv∞ Φßsti, v hornφ Φßsti jsou projekty, ve spodnφ soubory). Nejprve na hlavnφ formulß° p°idßme tlaΦφtko pro zobrazovßnφ vytvß°enΘho dialogovΘho okna. Zm∞nφme jeho vlastnosti Name na OAplTlacitko a vlastnost Caption na O aplikaci. Obsluha stisku tohoto tlaΦφtka bude tvo°ena p°φkazem:

  16. OknoOApl->ShowModal();
    Dßle budeme pokraΦovat v²vojem na╣eho dialogovΘho okna. Vytvo°φme nov² formulß° (volba File | New Form) a jeho rozm∞ry zmen╣φme asi na polovinu. Vlastnost Name zm∞nφme na OknoOApl, vlastnost Caption na O aplikaci a vlastnost BorderStyle na bsDialog. Do okna p°idßme komponenty Label podle nßsledujφcφho obrßzku.

    Znak pro oznaΦenφ autorsk²ch prßv (c v krou╛ku) mß k≤d 169 a je mo╛no jej zadat pomocφ klßvesy Alt (Alt + 0169). Na formulß° dßle p°idßme obrßzek ikony. Na formulß° vlo╛φme komponentu Image a umφstφme ji podle dal╣φho obrßzku. Vlastnost AutoSize u nφ zm∞nφme na true a dvojit∞ klikneme na hodnotu vlastnosti Picture. V zobrazenΘm okn∞ editoru stiskneme tlaΦφtko Load, p°ejdeme do adresß°e Program Files\Common Files\Borland Shared\Images\Icons a vybereme zde n∞jakou ikonu.
    Do spodnφ Φßsti formulß°e umφstφme komponentu BitBtn a vodorovn∞ ji vycentrujeme pomocφ Palety zarovnßvßnφ. Vlastnost Kind u nφ nastavφme na bkOK. Tφm je vytvß°enφ tlaΦφtka hotovo. TlaΦφtko obsahuje k≤d k uzav°enφ okna.
    Okolo text∙ umφstφme je╣t∞ rßmeΦek. Ten je tvo°en komponentou Bevel. Vybereme tuto komponentu a namφsto kliknutφ na formulß°i, tßhneme my╣φ rßmeΦek okolo text∙ na formulß°i. Dßle u komponenty Bevel zm∞nφme vlastnost Shape na bsFrame.

    Nynφ ji╛ m∙╛eme formulß° dialogovΘho okna ulo╛it (volba File | Save) a dßme mu jmΘno OAplikaci. Je╣t∞ je zapot°ebφ do jednotky hlavnφho formulß°e vlo╛it hlaviΦkov² soubor vytvo°enΘho dialogovΘho okna. P°ejdeme do Editoru k≤du (stiskem F12) a vybereme strßnku Hlavni.cpp. Zvolφme File | Include Unit Hdr, vybereme jednotku OAplikaci a stiskneme OK. Nynφ ji╛ program m∙╛eme vyzkou╣et.
    T°φdy spoleΦn²ch dialogov²ch oken (TOpenDialog, TSaveDialog, apod) nejsou vytvo°eny jako formulß°e. Windows poskytuje tato dialogovß okna jako mno╛inu oken, kterou je mo╛no pou╛φvat ve v╣ech Windowsovsk²ch aplikacφch (jejich definice je ulo╛ena v souboru COMDLG32.DLL). T°φdy dialogov²ch oken VCL zaobalujφ tato okna a usnad≥ujφ jejich pou╛φvßnφ.
  17. Sekundßrnφ okno je formulß°, kter² je zobrazovßn z hlavnφho okna. V C++ Builderu nenφ rozdφl mezi sekundßrnφm oknem a dialogov²m oknem. V jin²ch programovacφch prost°edφch musφme specifikovat, zda se jednß o sekundßrnφ nebo dialogovΘ okno.
  18. Zatφm jsme se zab²vali pouze SDI (Single Document Interface) aplikacemi. SDI aplikace majφ jedno hlavnφ okno a obvykle podle pot°eby zobrazujφ dialogovß okna, ale nezobrazujφ pod°φzenß okna. N∞kterΘ programy pou╛φvajφ model MDI (Multiple Document Interface). MDI aplikace obsahujφ hlavnφ okno a pod°φzenß okna. P°φkladem MDI aplikace je textov² editor Word (m∙╛e zde b²t souΦasn∞ otev°eno vφce dokument∙). Pod°φzenß okna je mo╛no p°emis╗ovat pouze uvnit° hlavnφho okna. MDI aplikace obvykle majφ v nabφdce volbu Window (Okno) s volbami, kterΘ umo╛≥ujφ pod°φzenß okna rozmis╗ovat a urΦovat aktivnφ pod°φzenΘ okno. P°i minimalizaci pod°φzenΘho okna, je ikona okna obsa╛ena v hlavnφm okn∞. MDI aplikacemi se budeme zab²vat pozd∞ji.
  19. V dal╣φm p°φkladu si ukß╛eme pou╛itφ ╣ablony dialogovΘho okna. Vytvo°φme nov² prßzdn² projekt, zvolφme File | New, na strßnce Dialogs zvolφme PasswordDialog a stiskneme OK. Tφm jsme k na╣emu projektu p°idali dal╣φ formulß° (formulß° pro zadßvßnφ hesla). Zobrazte tento p°idan² formulß° (╣ablonu) a vyberte v nφ editaΦnφ komponentu. Podφvejte se na vlastnost PasswordChar tΘto komponenty. Hodnota vlastnosti je *. Kdy╛ u╛ivatel bude zapisovat do tΘto komponenty n∞jak² text, bude namφsto ka╛dΘho zapsanΘho znaku zobrazen znak hv∞zdiΦky. Tyto Φinnosti jsou ji╛ nadefinovanΘ v pou╛itΘ ╣ablon∞.

  20. Na nß╣ p∙vodnφ formulß° p°idßme tlaΦφtko a vygenerujeme obsluhu stisku tohoto tlaΦφtka. Do obsluhy vlo╛φme p°φkaz:
    PasswordDlg->ShowModal();
    Do jednotky hlavnφho formulß°e je je╣t∞ nutno vlo╛it hlaviΦkov² soubor dialogovΘho okna. Nynφ ji╛ aplikaci m∙╛eme spustit a vyzkou╣et zadßvßnφ hesla. V tomto p°φklad∞ jsme si ukßzali pou╛itφ ╣ablon, tj. ji╛ d°φve vytvo°en²ch formulß°∙, ve kter²ch m∙╛eme i n∞co dod∞lat.
  21. V dob∞ nßvrhu jsou dialogovß okna normßlnφ formulß°e. P°i b∞hu aplikace mohou b²t modßlnφ nebo nemodßlnφ. V∞t╣ina dialogov²ch oken je modßlnφch. P°i nemodßlnφm spu╣t∞nφ m∙╛e u╛ivatel pou╛φvat libovoln² formulß° na obrazovce. M∙╛eme nap°. vytvo°it nemodßlnφ formulß° k zobrazovßnφ stavov²ch informacφ. Pokud po╛adujeme, aby nemodßlnφ okno bylo stßle zobrazeno nad ostatnφmi okny, nastavφme jeho vlastnost FormStyle na hodnotu fsStayOnTop.

  22. Vytvo°φme nov² prßzdn² projekt, na formulß° p°idßme tlaΦφtko a vytvo°φme obsluhu stisku tohoto tlaΦφtka s k≤dem:
    AboutBox->Show();
    K projektu p°idßme dßle ze zßsobnφku formulß°∙ okno About (zvolφme File | New a na strßnce Forms vybereme About Box) a volbou File | Include File Hdr p°idßme k Unit1 hlaviΦkov² soubor Unit2. Nynφ ji╛ aplikaci m∙╛eme spustit a vyzkou╣et si chovßnφ nemodßlnφho dialogovΘho okna (okno About nelze uzav°φt). M∙╛ete takΘ vyzkou╣et zm∞nu chovßnφ kdy╛ vlastnost FormStyle okna About zm∞nφme na hodnotu fsStayOnTop.
  23. Pokud v na╣φ aplikaci zm∞nφme obsluhu tlaΦφtka na

  24. AboutBox->ShowModal();
    pak okno bude zobrazeno v modßlnφm stavu. Vyzkou╣ejte chovßnφ modßlnφho okna. Zp∙sob zobrazenφ neovliv≥uje vzhled okna.
  25. T°φda TForm mß mnoho vlastnostφ. N∞kterΘ z t∞chto vlastnostφ jsou zastaralΘ a z°φdka pou╛φvanΘ, jinΘ se pou╛φvajφ Φasto. Nynφ se seznßmφme s Φasto pou╛φvan²mi vlastnostmi. Vynechßme p°itom vlastnosti, kterΘ nßm jsou ji╛ znßmΘ (Color, Left, Top, Width a Height). Nejprve se budeme zab²vat vlastnostmi pou╛iteln²mi jak p°i nßvrhu, tak i p°i b∞hu aplikace.
  26. N∞kterΘ vlastnosti jsou p°φstupnΘ pouze za b∞hu prost°ednictvφm k≤du. Nejd∙le╛it∞j╣φ z nich jsou tyto vlastnosti:
  27. Formulß°e jsou takΘ komponenty. Formulß°e majφ mnoho metod spoleΦn²ch s komponentami. SpoleΦnΘ metody jsou nap°. Show, ShowModal a Invalidate. Jsou ale metody, kterΘ existujφ pouze pro formulß°e. Nßsleduje popis nejΦast∞ji pou╛φvan²ch metod formulß°e:
  28. Formulß°e mohou reagovat na r∙znΘ udßlosti. Nßsleduje popis nejΦast∞ji pou╛φvan²ch udßlostφ:
  29. P°i vytvß°enφ formulß°e je generovßno mnoho r∙zn²ch udßlostφ. Je d∙le╛itΘ v∞d∞t v jakΘm po°adφ jsou tyto udßlosti generovßny. Toto po°adφ je: P°i ru╣enφ formulß°e jsou udßlosti generovßny v tomto po°adφ: Toto po°adφ je v n∞kter²ch p°φpadech d∙le╛itΘ. Nenφ nap°. mo╛no pou╛φvat v p°edchozφ obsluze udßlosti n∞jak² objekt, kter² bude vytvo°en a╛ v dal╣φ udßlosti.
  30. Prvnφ formulß°, kter² vytvo°φme se stßvß hlavnφm formulß°em projektu a je prvnφm formulß°em vytvo°en²m po spu╣t∞nφ aplikace. M∙╛eme ale po╛adovat jin² hlavnφ formulß°. Ke zm∞n∞ hlavnφho formulß°e projektu zvolφme Project | Options, p°ejdeme na strßnku Forms a urΦφme nov² hlavnφ formulß°. Na stejnΘ strßnce tohoto dialogovΘho okna m∙╛eme takΘ urΦit, kterΘ formulß°e budou automaticky vytvß°eny po spu╣t∞nφ aplikace a po°adφ jejich vytvß°enφ (vytvß°enΘ formulß°e jsou uvedeny v Φßsti Auto-Create Forms a jsou vytvß°eny v uvedenΘm po°adφ).
  31. Pou╛φvßnφ modßlnφch a nemodßlnφch formulß°∙ si ukß╛eme v dal╣φ aplikaci. Hlavnφ formulß° bude obsahovat text (komponentu Label) ?Toto je hlavnφ formulß° aplikace? a dv∞ tlaΦφtka: ?Otev°i modßlnφ formulß°? a ?Otev°i nemodßlnφ formulß°?. Po p°idßnφ dvou nov²ch formulß°∙ do projektu volbou File | New Form (nazveme je Modalni a Nemodalni; vlastnost Name formulß°e) m∙╛eme napsat obsluhy stisku tlaΦφtek. Pro Otev°i modßlnφ formulß° bude obsluha tvo°ena p°φkazy:

  32. TModalni *Modal = new TModalni(this);
    Modal->ShowModal();
    Modal->Free();
    Pro druhΘ tlaΦφtko to jsou p°φkazy:
    TNemodalni *Nemodal = new TNemodalni(this);
    Nemodal->Show();
    Po zav°enφ modßlnφho formulß°e se ukonΦφ metoda ShowModal a formulß° je uvoln∞n z pam∞ti. Metoda Show je ukonΦena okam╛it∞ a formulß° z pam∞ti uvolnit nelze, nebo╗ je stßle zobrazen. Nemodßlnφ formulß°e jsou z pam∞ti uvoln∞ny a╛ p°i uzav°enφ hlavnφho formulß°e. Nenφ to sice nejlep╣φ °e╣enφ, ale zatφm jej pou╛ijeme. Oba na╣e dal╣φ formulß°e budou obsahovat tlaΦφtko Zav°φt a text ?Modßlnφ formulß° resp. ?Nemodßlnφ formulß°. Obsluha stisku tlaΦφ?. Zav°φt je tvo°ena pouze volßnφm metody Close. Modßlnφ formulß° bude mφt je╣t∞ tlaΦφtko ?Otev°i dal╣φ modßlnφ formulß° pro vytvo°enφ dal╣φho (stejnΘho) modßlnφho formulß°e (u nemodßlnφch formulß°∙ to nenφ zapot°ebφ, nebo╗ opakovan²m stiskem tlaΦφtka na hlavnφm formulß°i lze vytvo°it vφce stejn²ch nemodßlnφch formulß°∙). Obsluha stisku tohoto tlaΦφtka je tvo°ena p°φ?
    TModalni *DalsiModal = new TModalni(this);
    DalsiModal->ShowModal();
    DalsiModal->Free();
    Hlavnφ formulß° pou╛φvß oba dal╣φ formulß°e a musφme tedy do Unit1 vlo╛it hlaviΦkovΘ soubory Unit2 a Unit3 (File | Include Unit Hdr). Objekty dialogov²ch oken vytvß°φme sami (operßtorem new) a m∙╛eme tedy odstranit k≤d, kter² Builder automaticky generuje pro definovßnφ objektu formulß°e. V obou programov²ch jednotkßch t∞chto formulß°∙ tedy musφme odstranit deklaraci TModalni Modalni; resp. TNemodalni Nemodalni; a je nutno zru╣it automatickΘ vytvß°enφ t∞chto formulß°∙. V dialogovΘm okn∞ Project Options na strßnce Forms p°esuneme jmΘna t∞chto dvou formulß°∙ z levΘho do pravΘho sloupce. Nynφ ji╛ m∙╛eme na╣i aplikaci vyzkou╣et a vytvo°it n∞kolik modßlnφch a nemodßlnφch formulß°∙ a zjistit, jak s nimi lze pracovat. Nenφ ale vhodnΘ t∞chto oken vytvß°et mnoho (z d∙vodu spot°eby systΘmov²ch zdroj∙), maximßln∞ asi 10.
  33. V zßvislosti na uva╛ovanΘm pou╛itφ dialogovΘho okna, je nutno do okna umφstit tlaΦφtka (nap°. tlaΦφtko OK a Cancel). Nastavenφ vlastnostφ komponent tlaΦφtek (vlastnosti Cancel a Default) umo╛≥uje volat k≤d obsluhy udßlosti stisku tlaΦφtka, kdy╛ u╛ivatel stiskne klßvesu Esc nebo Enter. Nap°. kdy╛ formulß° obsahuje tlaΦφtko s nastavenou vlastnostφ Default na true, pak stisk klßvesy Enter spustφ k≤d obsluhy udßlosti OnClick pro toto tlaΦφtko, pokud n∞kterΘ jinΘ tlaΦφtko nenφ zaost°eno. Existuje-li jinΘ zaost°enΘ tlaΦφtko, pak stisk klßvesy Enter zp∙sobφ provedenφ obsluhy udßlosti OnClick zaost°enΘho tlaΦφtka.

  34. Modßlnφ okno bude automaticky uzav°eno, kdy╛ u╛ivatel stiskne n∞kterΘ tlaΦφtko s nenulovou hodnotou vlastnostφ ModalResult. R∙znΘ hodnoty tΘto vlastnosti takΘ umo╛≥ujφ urΦit, kter²m tlaΦφtkem bylo okno uzav°eno. Nap°. mßme-li tlaΦφtko Cancel, nastavφme jeho vlastnost ModalResult na mrCancel a pokud nß╣ formulß° obsahuje dßle tlaΦφtko OK, nastavφme jeho ModalResult na mrOK. Ob∞ tlaΦφtka lze nynφ pou╛φt k uzav°enφ okna a hodnota vlastnosti ModalResult pou╛itΘho tlaΦφtka je nßvratovß hodnota funkce ShowModal. Testovßnφm hodnoty funkce ShowModal lze zjistit, kter²m tlaΦφtkem bylo okno uzav°eno.
    V mnoha p°φpadech m∙╛eme vytvß°et tlaΦφtka pomocφ komponenty BitBtn pouh²m nastavenφm vlastnosti Kind (urΦφme tφm text zobrazen² na tlaΦφtku a hodnotu vlastnosti ModalResult).
14. Formulß°e I