18. Nabφdka II
  1. N∞kdy se m∙╛eme dostat do situace, kdy v╣echny ovladaΦe se nevejdou na plochu formulß°e. Jestli╛e komponenty rozmφstφme na velk² formulß° a potom zmen╣φme jeho velikost (tak, ╛e n∞kterΘ komponenty se do n∞j ji╛ nevejdou), jsou do formulß°e automaticky p°idßny posuvnφky. Toto nynφ vyzkou╣φme. V novΘ aplikaci ud∞lßme ╣irok² formulß°, po celΘ jeho plo╣e rozmφstφme r∙znΘ komponenty a formulß° z·╛φme. Aplikaci spustφme a vyzkou╣φme.

  2. Do tΘto aplikace se dßle pokusφme p°idat malΘ stavovΘ okno, kterΘ nßs bude informovat o stavu vodorovnΘho posuvnφku. K aplikaci tedy p°idßme dal╣φ formulß°. P°idßme na n∞j (pod sebe) dv∞ komponenty Label s texty ?⌐φ°e formulß°e:? ?Pozice posuvnφku:? a vedle nich dal╣φ dv∞ komponenty Label pro v²pis aktußlnφch hodnot. Velikost tohoto formulß°e zmen╣φme a nastavφme jeho vlastnosti takto: Caption na Stav posuvnφku, BorderIcons na [biSystemMenu], BorderStyle na bsSingle, FormStyle na fsStayOnTop a Visible na true (po spu╣t∞nφ aplikace bude formulß° viditeln²). Pro hlavnφ formulß° vytvo°φme je╣t∞ obsluhu udßlosti OnResize s p°φkazy:
    Form2->Label3->Caption = IntToStr(ClientWidth);
    Form2->Label4->Caption = IntToStr(HorzScrollBar->Position);
    Aplikaci spustφme a p°i zm∞n∞ velikosti formulß°e se m∞nφ zobrazovanΘ hodnoty ve stavovΘm okn∞. Kdy╛ ale pou╛ijeme posuvnφk, pak hodnoty ve stavovΘm okn∞ se nezm∞nφ. Builder toto neumo╛≥uje nebo╗ pro formulß° neexistuje udßlost OnScroll (nenφ to nutnΘ, nebo╗ ve v∞t╣in∞ p°φpad∙ formulß°e obsluhujφ posuvnφky automaticky). Tato udßlost by byla zapot°ebφ pouze v n∞kter²ch specißlnφch p°φpadech (nap°. prßv∞ v na╣i aplikaci).
  3. Velkou v²hodou C++ Builderu je to, ╛e kdy╛ velikost n∞kterΘ komponenty na formulß°i se zm∞nφ, pak se podle pot°eby automaticky p°idajφ nebo odstranφ posuvnφky. Jako p°φklad m∙╛eme pou╛φt komponentu Image. Jestli╛e do komponenty nahrajeme nov² obrßzek a jejφ vlastnost AutoSize je nastavena na true, pak komponenta automaticky m∞nφ velikost podle velikosti obrßzku a formulß° p°idßvß nebo odstra≥uje posuvnφky. Vra╗me se k na╣i aplikaci zobrazovaΦe obrßzk∙. Jednß se o formulß° zobrazujφcφ bitovou mapu nahranou ze souboru, kterß je zobrazena v p∙vodnφ velikosti nebo deformovßna tak, aby se do formulß°e vt∞snala. U na╣eho p∙vodnφho zobrazovaΦe obrßzk∙ (v p°edchozφ kapitole) zm∞nφme u komponenty Image vlastnost AutoSize na true, z nabφdky odstranφme volbu Centrovat a zm∞nφme obsluhu volby Zaplnit (p°i zapnutΘ volb∞ odstranφme posuvnφky) takto:

  4. Image1->Stretch = ! Image1->Stretch;
    Centrovat1->Checked = Image1->Stretch;
    if (Image1.Stretch) Image1->Align = alClient;
    else {
      Image1->Align = alNone;
      Image1->Height = Image1->Picture->Height;
      Image1->Width = Image1->Picture->Width;
    }
    Aplikace je hotova. Zmen╣φme formulß° a nahrajeme n∞jak² velk² obrßzek. Vidφme, ╛e jsou v p°φpad∞ pot°eby automaticky p°idßny posuvnφky.
  5. Vytvo°te aplikaci, kde na formulß°i bude pouze editaΦnφ ovladaΦ. K formulß°i vytvo°te mφstnφ nabφdku, kterß umo╛nφ m∞nit barvu formulß°e (pou╛ijte zde volby Modrß, ╚ervenß a Zelenß) a pro editaΦnφ ovladaΦ vytvo°te jinou mφstnφ nabφdku (s volbami Pφsmo a Velikost pφsmen - druhou volbou m∞≥te vlastnost CharCase editaΦnφho ovladaΦe). Aplikaci vyzkou╣ejte.
  6. P°i zobrazovßnφ mφstnφ nabφdky barvy formulß°e by bylo vhodnΘ, aby prvek nabφdky urΦujφcφ souΦasnou barvu formulß°e byl od╣krtnut². Pokusφme se tuto zm∞nu provΘst. Vyu╛ijeme toho, ╛e p°i zobrazovßnφ mφstnφ nabφdky vznikß udßlost OnPopup. Vytvo°φme tedy obsluhu tΘto udßlosti:

  7. for (int I = 0; I < PopupMenu1->Items->Count; I++)
      PopupMenu1->Items->Items[I]->Checked = false;
    if (Color == clBlue) Modr1->Checked = true;
    if (Color == clRed) erven1->Checked = true;
    if (Color == clGreen) Zelen1->Checked = true;
    Na poΦßtku obsluhy je u v╣ech prvk∙ mφstnφ nabφdky zru╣eno od╣krtnutφ pomocφ cyklu na poli Items mφstnφ nabφdky. Cyklus probφhß od 0 do Count-1. Jeho v²hodou je to, ╛e funguje na v╣ech prvcφch nabφdky, nezßvisle na jejich poΦtu. Vyzkou╣ejte.
  8. Zatφm jsme pou╛φvali automatickΘ mφstnφ nabφdky. Alternativou je nastavenφ vlastnosti AutoPopup na false a pou╛itφ metody Popup pro zobrazenφ mφstnφ nabφdky na obrazovku. Metoda vy╛aduje dva parametry, X a Y sou°adnice plßnovanΘho umφst∞nφ nabφdky. ProblΘm je v tom, ╛e musφme zadat sou°adnice bodu obrazovky a ne u╛ivatelskΘ sou°adnice, kterΘ se u u╛ivatelskΘ plochy obvykle pou╛φvajφ.

  9. ZaΦneme novou aplikaci, kde na formulß° umφstφme pouze komponentu Memo, kterß zaplnφ cel² formulß°. Do komponenty Memo zapφ╣eme n∞kolik °ßdk∙ textu. Pro komponentu vytvo°φme dv∞ mφstnφ nabφdky. Prvnφ bude umo╛≥ovat zm∞nu pφsma a barvy komponenty (prvky Pφsmo a Barva) a druhß bude urΦovat zarovnßvßnφ textu v komponent∞ (prvky Vlevo, Vpravo a Doprost°ed). U obou nabφdek nastavφme vlastnost AutoPopup na false. Budeme se sna╛it, aby v╛dy p°i stisku pravΘho tlaΦφtka my╣i se nabφdka zm∞nila. Vytvo°φme tedy obsluhu stisku tlaΦφtka my╣i (OnMouseDown) pro komponentu Memo:
    if (Button == mbRight) {
      TPoint KlBod, ObBod;
      KlBod.x  = X;
      KlBod.y = Y;
      ObBod = ClientToScreen(KlBod);
      PocetKliknuti++;
      if (PocetKliknuti & 1) PopupMenu1->Popup(ObBod.x, ObBod.y);
      else PopupMenu2->Popup(ObBod.x, ObBod.y);
    }
    V obsluze je nejprve zji╣t∞no, zda bylo stisknuto pravΘ tlaΦφtko my╣i, dßle jsou u╛ivatelskΘ sou°adnice mφsta kliknutφ p°evedeny na obrazovkovΘ sou°adnice (pomocφ metody ClientToScreen), poΦφtßn poΦet kliknutφ (deklarujeme PocetKliknuti jako soukromou polo╛ku formulß°e; je typu int) a zobrazφme p°φslu╣nou nabφdku. Obsluhy voleb nabφdky vytvo°te sami. U druhΘ nabφdky se pokuste od╣krtnout aktußln∞ nastavenou volbu.
  10. V dal╣φ aplikaci se seznßmφme s pou╛φvßnφm komponenty MaskEdit. Jednß se o editaΦnφ komponentu, kterß mß specißlnφ vlastnost EditMask. Jestli╛e otev°eme Editor vstupnφ masky (stiskem tlaΦφtka (...) v Inspektoru objekt∙), m∙╛eme snadno definovat °et∞zec vstupnφ masky, kter² urΦuje zapisovan² °et∞zec. Mimo zadßnφ masky umo╛≥uje Editor vstupnφ masky zadat znak pou╛it² pro urΦenφ mφsta pro vstup a rozhodnout, zda se budou s °et∞zcem uklßdat i dal╣φ znaky obsa╛enΘ v masce. Nap°. u k≤du zem∞ v telefonnφm Φφsle si m∙╛eme zßvorky nastavit pouze jako vstupnφ pom∙cku nebo je uklßdat i s °et∞zcem telefonnφho Φφsla. Tyto dva ·daje odpovφdajφ poslednφ Φßsti masky (implicitnφ odd∞lovaΦ je st°ednφk). Stiskneme-li v Editoru vstupnφ masky tlaΦφtko Masks, pak m∙╛eme otev°φt soubor masek. P°eddefinovanΘ soubory obsahujφ standardnφ masky pro n∞kterΘ zem∞.

  11. ZaΦneme s v²vojem novΘ aplikace. Na formulß° umφstφme komponentu MaskEdit a v Editoru vstupnφ masky vybereme n∞kterou masku. P°ed tuto komponentu umφstφme text Editace s maskou:. Pod MaskEdit umφstφme komponentu Edit a p°ed nφ text EditaΦnφ maska:. Do spodnφ Φßsti formulß°e umφstφme komponentu ListBox obsahujφcφ popis znak∙ masky. Zadßme zde tyto °et∞zce znak∙ (komponentu zv∞t╣φme):
    (l) mo╛nΘ pφsmeno (letter)
    (L) vy╛adovanΘ pφsmeno
    (a) mo╛n² alfanumerick² znak
    (A) vy╛adovan² alfanumerick² znak
    (c) mo╛n² znak (character)
    (C) vy╛adovan² znak
    (9) mo╛nß Φφslice
    (0) vy╛adovanß Φφslice
    (#) Φφslice nebo znamΘnko
    (_) mezera (m∙╛eme m∞nit znak reprezentujφcφ mezeru)
    (\) nßsledujφcφ znak je interpretovßn jako literßl
    (>) p°evod na velkß pφsmena
    (<) p°evod na malß pφsmena
    (<>) bez ·pravy velikosti pφsmen
    (!) potlaΦenφ ·vodnφch mezer
    (/) standardnφ systΘmov² odd∞lovaΦ m∞sφc∙, dn∙ a rok∙ v datumu
    (:) standardnφ systΘmov² odd∞lovaΦ hodin, minut a sekund v Φase
    (;) odd∞lovaΦ polφ masky
    Vytvo°φme je╣t∞ dv∞ obsluhy udßlostφ. Obsluha udßlosti OnCreate formulß°e bude tvo°ena p°φkazem:
    Edit1->Text = MaskEdit1->EditMask;
    a obsluha OnChange editaΦnφho ovladaΦe p°φkazem:
    MaskEdit1->EditMask = Edit1->Text;
    Nynφ ji╛ aplikaci m∙╛eme vyzkou╣et. Do editaΦnφho ovladaΦe zadßme n∞jakou masku a vyzkou╣φme jak² mß vliv na vstup v komponent∞ MaskEdit.
  12. Dßle budeme pokraΦovat v na╣em obecnΘm seznamovßnφ s komponentami. Zam∞°φme se nynφ na tlaΦφtka. VCL obsahuje n∞kolik typ∙ tlaΦφtek, kterß m∙╛eme pou╛φvat ve sv²ch aplikacφch. Ne v╣echny jsou zalo╛eny na standardnφch ovladaΦφch Windows. Nejprve se budeme zab²vat tlaΦφtkem Button. Tento typ tlaΦφtka mß pouze 4 zajφmavΘ vlastnosti. Vlastnost ModalResult je pou╛ita k zabudovanΘmu uzav°enφ formulß°e, kter² byl zobrazen pomocφ ShowModal. Implicitn∞ ModalResult je nastavena na mrNone (hodnotu 0). P°i pou╛itφ tΘto hodnoty se tlaΦφtko chovß jako normßlnφ tlaΦφtko (neuzavφrß formulß°). Jesli╛e pro ModalResult pou╛ijeme jinou hodnotu, pak stisknutφ tlaΦφtka uzavφrß formulß° a vracφ hodnotu ModalResult. Nßsleduje seznam p°eddefinovan²ch konstant ModalResult ve VCL: mrNone, mrOK, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, mrNoToAll a mrYesToAll.

  13. Vlastnost Default je dal╣φ klφΦovou vlastnostφ tlaΦφtek. Windows mß standardnφ mechanismus pro prßci s dialogov²mi okny. Jedna ze slu╛eb tohoto mechanismu je: Pokud zaost°enφ mß jin² ovladaΦ ne╛ n∞kterΘ tlaΦφtko a u╛ivatel stiskne klßvesu Enter, pak dialogovΘ okno se chovß stejn∞ jako kdyby u╛ivatel stiskl implicitnφ tlaΦφtko. Implicitnφ tlaΦφtko je tlaΦφtko, kterΘ mß nastavenu vlastnost Default na true. Podobn∞ pracuje vlastnost Cancel. Namφsto klßvesy Enter se ale t²kß klßvesy Esc. Pokud u vφce tlaΦφtek je hodnota vlastnosti Default nebo Cancel nastavena na true, pak je pou╛ito prvnφ tlaΦφtko v Tab po°adφ, kterΘ je nalezeno. Vlastnost Enabled pracuje obdobn∞ jako u jin²ch komponent. Pokud u n∞kterΘho tlaΦφtka nastavφme vlastnost Enabled na false, pak tlaΦφtko je nefunkΦnφ (je zakßzßno).
    Implicitnφ hodnota vlastnosti Height je 25 a implicitnφ hodnota vlastnosti Width je 75. TlaΦφtko obvykle umis╗ujeme na formulß° a reagujeme na jeho udßlost OnClick.
    Komponenta BitBtn je ukßzkou toho, jak komponenta m∙╛e b²t roz╣φ°ena k poskytnutφ dal╣φ funkΦnosti. V tomto p°φpad∞ stantardnφ komponenta Button je ro╛φ°ena k umo╛n∞nφ zobrazovßnφ bitovΘ mapy na tlaΦφtku. Komponenta BitBtn mß o n∞kolik vlastnostφ vφce ne╛ komponenta Button. V╣echny tyto p°idanΘ vlatnosti se t²kajφ obrßzku na tlaΦφtku. Vlastnost Glyph urΦuje bitovou mapu zobrazovanou na tlaΦφtku (obrßzek obvykle ve formßtu BMP). Obrßzek samotn² obsahuje jednu nebo vφce bitov²ch map, kterΘ reprezentujφ a╛ 4 mo╛nΘ stavy tlaΦφtka. Standardnφ obrßzky tlaΦφtek poskytnut²ch s C++ Builderem majφ rozm∞ry 15 x 15 a zachycujφ dva stavy. Vlastnost Kind je slu╛ba komponenty BitBtn, kterß umo╛≥uje volit z n∞kolika p°eddefinovan²ch tlaΦφtek. Implicitnφ hodnota pro vlastnost Kind je bkCustom, kterß znamenß, ╛e obrßzek a dal╣φ vlastnosti tlaΦφtka budeme nastavovat sami. Volbou jinΘ hodnoty se nastavφ automaticky tyto dal╣φ vlastnosti: Glyph, Cancel nebo Default, Caption a ModalResult. Vlastnost Layout urΦuje, zda obrßzek bude zobrazen p°ed, za, nad  nebo pod textem. Implicitnφ hodnota je blGlyphLeft. Vlastnost Margin urΦuje mezeru mezi obrßzkem a okrajem tlaΦφtka. Implicitnφ hodnota je -1, co╛ znamenß, centrovßnφ obrßzku a textu v tlaΦφtku. Vlastnost NumGlyphs urΦuje poΦet obrßzk∙ (poΦet stav∙ tlaΦφtka). Vlastnost Spacing urΦuje velikost mezery mezi obrßzkem a textem v bodech.
    Komponenta SpeedButton je urΦena k pou╛φvßnφ s panelem k vytvß°enφ palet nßstroj∙. Od p°edchozφch dvou typ∙ tlaΦφtek se li╣φ tφm, ╛e se nejednß o Windowsovsk² ovladaΦ, tzn. nem∙╛e zφskaz zaost°enφ. Na druhΘ stran∞ SpeedButton mß n∞kolik v∞cφ spoleΦn²ch s BitBtn (nap°. Glyph). Tyto tlaΦφtka jsou implicitn∞ Φtverce o rozm∞rech 25 x 25 (m∙╛eme zm∞nit na libovolnou velikost) a mohou obsahovat text (text se ale obvykle nepou╛φvß). V C++ Builderu 1.0 se k vytvß°enφ palety nßstroj∙ pou╛φvala komponenta Panel. C++ Builder 3.0 mß pro tyto ·Φely komponentu Toolbar (jsou zde p°eddefinovanΘ dal╣φ mo╛nosti).
    TlaΦφtka SpeedButton m∙╛eme seskupovat do skupin. Kdy╛ jedno tlaΦφtko ve skupin∞ stiskneme, pak z∙stane stisknutΘ a d°φve stisknutΘ tlaΦφtko je uvoln∞no (pouze jedno m∙╛e z∙stat stisknuto). Skupinu tlaΦφtek vytvo°φme p°i°azenφm stejnΘ hodnoty jejich vlastnostem GroupIndex (implicitnφ hodnota 0 indikuje, ╛e tlaΦφtko nepat°φ do ╛ßdnΘ skupiny). P°i°azenφm nenulovΘ hodnoty vlastnosti GroupIndex se zm∞nφ chovßnφ tlaΦφtka.
    Implicitn∞ ve skupin∞ m∙╛e b²t stisknutΘ pouze jedno tlaΦφtko. Toto chovßnφ lze zm∞nit nastavenφm vlastnosti AllowAllUp na true. Tφm dosßhneme toho, ╛e stisknuto m∙╛e z∙stat vφce tlaΦφtek. N∞kdy po╛adujeme, aby komponenta SpeedButton pracovala jako p°epφnacφ tlaΦφtko (indikace zapnutφ nebo vypnutφ n∞jakΘ volby). Toho dosßhneme vytvo°enφm skupiny s jednφm tlaΦφtkem, kde AllowAllUp je nastaveno na true. ╚tenφm vlastnosti Down lze zjistit, zda tlaΦφtko je stisknuto (true). Zßpisem do tΘto vlastnosti m∞nφme stav (stisknutφ) tlaΦφtka (mß vliv pouze na tlaΦφtka ve skupin∞).
  14. ZnaΦky a voliΦe lze takΘ pova╛ovat za tlaΦφtka. Komponenty RadioButton a CheckBox majφ vlastnost Checked, kterou lze pou╛φt k nastavenφ stavu nebo k zφskßnφ souΦasnΘho stavu. VoliΦe jsou obvykle pou╛φvßny ve skupin∞ (skupina voleb, z nich╛ pouze jedna m∙╛e b²t vybrßna). Pokud na formulß°i pot°ebujeme vφce skupin voliΦ∙, pak je vhodnΘ ka╛dou skupinu vytvo°it jednou komponentou RadioGroup. Tato komponenta usnad≥uje vytvo°enφ skupiny voliΦ∙ a takΘ poskytuje jejich orßmovßnφ a titulky (jak pro voliΦe - vlastnost Items; zadßvßme v Editoru °et∞zc∙ - tak i pro celou skupinu). Komponenta RadioGroup mß vlastnost ItemIndex, kterß urΦuje oznaΦen² voliΦ.

  15. Skupinu voliΦ∙ je takΘ mo╛no vytvo°it umφst∞nφm n∞kolika komponent RadioButton na komponentu GroupBox (na GroupBox je mo╛no umφstit i jinΘ komponenty). Pokud pou╛φvßme pouze voliΦe, pak je v²hodn∞j╣φ pou╛φt RadioGroup.
    Komponenta CheckBox je pou╛φvßna k umo╛n∞nφ u╛ivateli zapφnat a vypφnat n∞jakou volbu a indikovat zda volba je prßv∞ zapnuta nebo vypnuta. ZnaΦky mohou mφt a╛ 3 stavy (zapnuto, vypnuto a neurΦeno). Pokud vlastnost AllowGrayed je nastavena na false (implicitn∞), pak k urΦenφ stavu znaΦky pou╛φvßme vlastnost Checked. Jestli╛e ale vlastnost AllowGrayed mß hodnotru true, pak k testovßnφ (nebo nastavenφ) stavu znaΦky je nutno pou╛φt vlastnost State (mo╛nΘ hodnoty cbChecked, cbUnchecked a cbGrayed). Pokud pot°ebujeme znaΦku pou╛φt pouze k indikaci n∞jakΘho stavu a neumo╛nit m∞nit u╛ivateli stav znaΦky (znaΦku urΦenou pouze pro Φtenφ) a nechceme aby znaΦka byla ╣edß, pak ji m∙╛eme umφstit na panel s vlastnostφ Enabled nastavenou na false.
  16. Komponenta Label je pou╛φvßna k zobrazenφ textu na formulß°i. Text m∙╛e b²t statick² (nem∞nn²) nebo dynamick² (za b∞hu aplikace se m∙╛e m∞nit). Ke zm∞n∞ textu se pou╛φvß vlastnost Caption. Komponenta Label nemß ╛ßdnΘ specializovanΘ metody nebo udßlosti. D∙le╛itΘ vlastnosti jsou popsßny v nßsledujφcφ tabulce:

  17.  
    Vlastnost Popis
    AutoSize P°i nastavenφ na true, m∞nφ komponenta svoji velikost podle textu obsa╛enΘho ve vlastnosti Caption. P°i nastavenφ na false, je text o°φznut prav²m okrajem ovladaΦe.
    FocusControl Label je neWindowsovskß komponenta a nem∙╛e tedy zφskat zaost°enφ. M∙╛e ale slou╛it jako text pro jin² ovladaΦ (nap°. Edit). V t∞chto p°φpadech m∙╛eme p°i°adit ovladaΦi urychlovacφ klßvesu (pomocφ &) a vlastnostφ FocusControl p°i°adit ovladaΦ, kter² p°i pou╛itφ urychlovacφ klßvesy mß b²t zaost°en.
    ShowAccelChar P°i nastavenφ na true, jsou znaky & zobrazovßny v textu (neslou╛φ k oznaΦenφ urychlovacφ klßvesy).
    Transparent P°i nastavenφ na true, je ignorovßna vlastnost Color (barva pozadφ je v╛dy zobrazovßna pr∙hlednou barvou). To je u╛iteΦnΘ p°i umis╗ovßnφ komponenty Label na pozadφ tvo°enΘ nap°. bitovou mapou.
    WordWrap P°i nastavenφ na true, text komponenty je p°i dosa╛enφ pravΘho okraje zalamovßn (pokraΦuje na novΘm °ßdku).
  18. Komponenta ScrollBar reprezentuje samostatn² posuvnφk (nenφ souΦßstφ jinΘ komponenty). Aplikace mohou vyu╛φvat posuvnφky k nastavovßnφ n∞jak²ch hodnot. Posuvnφk je urΦen nastavenφm vlastnostφ: Min, Max, LargeChange a SmallChange. Pozici madla posuvnφku m∙╛eme nastavit nebo zjistit prost°ednictvφm vlastnosti Position. Vlastnost Kind urΦuje, zda se jednß o vodorovn² nebo svisl² posuvnφk.
  19. Windows takΘ poskytuje n∞kolik dialogov²ch oken. Komponenty zaobalujφcφ tato okna nalezneme na strßnce Dialogs Palety komponent. K zobrazenφ t∞chto dialogov²ch oken pou╛φvßme metodu Execute. Dialogovß okna zobrazujeme modßln∞ (s v²jimkou Find a Replace, kterΘ jsou zobrazovßny nemodßln∞). Execute vracφ true, pokud u╛ivatel stiskl tlaΦφtko OK, dvojit∞ klikl na jmΘnu souboru (v p°φpad∞ souborov²ch dialogov²ch oken) nebo stiskl klßvesu Enter. Execute vrßtφ false, pokud u╛ivatel stiskl tlaΦφtko Cancel, klßvesu Esc nebo uzav°el dialogovΘ okno tlaΦφtkem na titulnφm °ßdku okna. ╚ßst p°φkazu:

  20. if (OpenDialog->Execute()) {
    je ekvivalentnφ s:
    if (OpenDialog->Execute() == true) {
    Dialogovß okna otev°enφ a ulo╛enφ souboru si popφ╣eme podrobn∞ji. DialogovΘ okno otev°enφ souboru pou╛ijeme, kdy╛ chceme u╛ivateli umo╛nit ve svΘ aplikaci otevφrßnφ souboru. Je zaobaleno v komponent∞ OpenDialog. DialogovΘ okno ulo╛enφ souboru je pou╛ito, kdy╛ zφskßvßme jmΘno uklßdanΘho souboru od u╛ivatele. Je zaobaleno v komponent∞ SaveDialog. Ob∞ komponenty majφ n∞kolik zajφmav²ch vlastnostφ.
    Vlastnost DefaultExt pou╛ijeme k nastavenφ implicitnφ p°φpony, kterou dialogovΘ okno bude pou╛φvat. Tato p°φpona bude automaticky p°ipojena ke jmΘnu souboru, v p°φpad∞ kdy u╛ivatel p°φponu nezadß. Vlastnost FileName je nejd∙le╛it∞j╣φ vlastnostφ. Obsahuje text jmΘna souboru, kter² u╛ivatel zvolil. Tuto vlastnost takΘ nastavujeme p°ed volßnφm dialogovΘho okna, pokud jmΘno souboru chceme zobrazit v okn∞ p°i jeho zobrazovßnφ. Files je vlastnost urΦenß pouze pro Φtenφ, obsahujφcφ seznam vybran²ch soubor∙, kdy╛ je povolen vφcenßsobn² v²b∞r.
    Vlastnost Filter obsahuje seznam typ∙ soubor∙, ze kter²ch u╛ivatel m∙╛e vybφrat. Tyto typy jsou zobrazovßny v kombinovanΘm ovladaΦi Files of type. Dvojit²m kliknutφm na hodnot∞ vlastnosti Filter v Inspektoru objekt∙ zobrazφme Editor filtr∙, kde ve sloupci Filter Name zadßvßme textov² popis typu souboru a ve sloupci Filter souborovou masku, kterß bude pou╛ita k odfiltrovßnφ jmen soubor∙ tohoto typu. Vlastnost FilterIndex je pou╛ita k nastavenφ filtru, kter² je pou╛it p°i zobrazenφ dialogovΘho okna (filtry jsou Φφslovßny od 1).
    Vlastnost InitialDir je pou╛φvßna ke specifikace adresß°e, kter² bude pou╛it p°i zobrazovßnφ dialogovΘho okna. Pokud hodnota tΘto vlastnosti nenφ zadßna, pak aktußlnφ adresß° je urΦen Windows. Vlastnost Options urΦuje zp∙sob pou╛itφ dialogovΘho okna. Seznam mo╛n²ch voleb je p°φli╣ dlouh² a jsou zde volby urΦujφcφ mo╛nost vytvß°enφ nov²ch adresß°∙, zobrazenφ tlaΦφtka Help v okn∞, zda mohou b²t pou╛φvßna dlouhß jmΘna, zda je povolen vφcenßsobn² v²b∞r a °ada dal╣φch. Vlastnost Title je pou╛φvßna k nastavenφ nebo Φtenφ titulku dialogovΘho okna.
  21. Existujφ dal╣φ dv∞ komponenty, kterΘ roz╣i°ujφ funkΦnost OpenDialog a SaveDialog (zobrazujφ prßv∞ vybran² obrßzek) - slou╛φ pro otevφrßnφ a uklßdßnφ soubor∙ obrßzk∙. Majφ takΘ nastavenu vlastnost Filter na formßty obrßzk∙ Windows.

  22. DialogovΘ okno Color umo╛≥uje volbu barvy. Vybranß barva je urΦena vlastnostφ Color. DialogovΘ okno Font umo╛≥uje volbu pφsma ze seznamu dostupn²ch pφsem systΘmu. Vlastnostφ Device volφme, zda chceme v okn∞ zobrazovat obrazovkovß pφsma, pφsma tiskßrny nebo obojφ. Velikost pφsma lze omezit vlastnosmi MaxFontSize a MinFontSize. Vlastnost Options obsahuje °adu voleb, kterΘ lze pou╛φt k ovliv≥ovßnφ funkΦnosti okna. Vlastnost Font obsahuje v╣echny informace o vybranΘm pφsmu. DialogovΘ okno volby pφsma mß jednu udßlost, udßlost OnApply, kterß nastane, kdy╛ u╛ivatel stiskne tlaΦφtko Apply. TlaΦφtko Apply je zobrazeno v okn∞ po vytvo°enφ obsluhy udßlosti OnApply.
  23. Dialogovß okna Find a Replace umo╛≥ujφ u╛ivateli zadßvat hledan² text (nahrazovan² text) a °adu r∙zn²ch voleb hledßnφ a nahrazovßnφ. Tato okna jsou ve VCL reprezentovßna komponentami FindDialog a ReplaceDialog. Hlavnφ vlastnosti t∞chto komponent zahrnujφ FindText (hledan² text), ReplaceText (text, kter² nahradφ nalezen² text; obvykle nenφ ve FindDialog) a Options (°ada r∙zn²ch voleb). Tato okna se pou╛φvajφ jin²m zp∙sobem ne╛ ostatnφ okna (jsou zobrazeny jako modßlnφ). S jejich pou╛itφm se seznßmφme pozd∞ji.

Kontrolnφ otßzky:

  1. Pokud zm∞nφme vlastnost Name komponenty pomocφ Inspektora objekt∙, jsou automaticky takΘ zm∞n∞ny v╣echny odkazy na tuto komponentu v k≤du?
  2. Komponenta OpenDialog je obvykle viditelnß. ProΦ ji °adφme mezi nevizußlnφ komponenty?
  3. ProΦ je mo╛nΘ vlastnost Name m∞nit pouze v Inspektoru objekt∙?
  4. ProΦ nelze pou╛φt instanci t°φdy TStrings pro ulo╛enφ seznamu °et∞zc∙ v na╣em programu (p°ekladaΦ nepovolφ vytvo°it instanci TStrings)?
  5. Je mo╛no m∞nit vlastnost Name komponent za b∞hu aplikace?
  6. Kterou vlastnost pou╛φvßme k zakßzßnφ (povolenφ) komponenty?
  7. Kterß komponenta je Φasto pou╛φvßna jako kontejner dal╣φch komponent?
╪e╣enφ
18. Nabφdka II