16. Formulß°e III
  1. V nßsledujφcφ aplikaci se zam∞°φme na pou╛φvßnφ udßlostφ OnEnter (zφskßnφ zaost°enφ komponentou) a OnExit (ztracenφ zaost°enφ komponentou). Na formulß° umφstφme t°i editaΦnφ ovladaΦe, p°ed n∞ umφstφme komponenty Label s texty ?&JmΘno?, ?&P°imenφ? a ?&Heslo?, tlaΦφtko s textem ?&Kopφruj p°φjmenφ do titulku? a komponentu Label, u kterΘ zm∞nφme barvu textu. U prvnφch t°φ komponent Label nastavφme vlastnosti FocusControl na p°φslu╣n² editaΦnφ ovladaΦ a tφm dosßhneme, ╛e pou╛itφm urychlovacφ klßvesy (nap°. Alt-J) p°edßme zaost°enφ na p°i°azen² editaΦnφ ovladaΦ. U editaΦnφho ovladaΦe hesla zm∞nφme vlastnost PasswordChar na *. Pro stisk tlaΦφtka vytvo°φme nßsledujφcφ obsluhu udßlosti:

  2. if (Edit2->Text != "") Caption = Edit2->Text;
    Udßlosti OnEnter editaΦnφch udßlostφ a tlaΦφtka o╣et°φme takto:
    void __fastcall TForm1::Edit1Enter(TObject *Sender){
      Label4->Caption = "Zadßvßnφ jmΘna ...";
    }
    //-----------------------------------------------------------------------
    void __fastcall TForm1::Edit2Enter(TObject *Sender){
      Label4->Caption = "Zadßvßnφ p°φjmenφ ...";
    }
    //-----------------------------------------------------------------------
    void __fastcall TForm1::Edit3Enter(TObject *Sender){
      Label4->Caption = "Zadßvßnφ hesla ...";
    }
    //-----------------------------------------------------------------------
    void __fastcall TForm1::Button1Enter(TObject *Sender){
      Label4->Caption = "TlaΦφtko pro kopφrovßnφ";
    }
    P°i stisku klßvesy Tab zost°enφ vstupu cykluje mezi editaΦnφmi komponentami a tlaΦφtkem. Toto po°adφ je urΦeno hodnotami vlastnostφ TabOrder. Poslednφ komponenta Label nßs informuje, kter² ovladaΦ mß vstupnφ zaost°enφ. M∙╛eme vyzkou╣et pou╛itφ urychlovacφch klßves.
  3. V dal╣φ aplikaci se budeme zab²vat vstupem Φφsel pomocφ editaΦnφ komponenty. Vytvo°φme formulß° s p∞ti editaΦnφmi ovladaΦi a p°ed n∞ umφstφme komponenty Label urΦujφcφ druh provßd∞nΘ kontroly nebo kdy se kontrola provede (budou zde tedy texty ?&Stisknutφ tlaΦφtka?, ?&Ztrßta zaost°enφ?, ?Zm∞na &textu?, ?Testovßnφ &vstupu? a ?&┌pln² test?). Na formulß° dßle umφstφme tlaΦφtko s textem ?Test?. U editaΦnφch komponent nastavφme je╣t∞ vlastnosti Tag na hodnoty 1 a╛ 5. Vlastnost Tag slou╛φ pro ulo╛enφ libovoln²ch dat, v na╣em p°φpad∞ je to Φφslo editaΦnφ komponenty. U prvnφ editaΦnφ komponenty se kontrola provßdφ p°i stisku tlaΦφtka. Obsluha stisku tlaΦφtka tedy bude tvo°ena p°φkazy (hodnotu -1 pou╛ijeme pro indikaci nep°φpustnΘho Φφsla):

  4. if (Edit1->Text != ""){
      int Cislo = Edit1->Text->ToIntDef(-1);
      if (Cislo == -1){
        ShowMessage("V prvnφm editaΦnφm ovladaΦi nenφ Φφslo");
        Edit1->SetFocus();
      }
      else ShowMessage("Prvnφ editaΦnφ ovladaΦ v po°ßdku");
    }
    U druhΘ editaΦnφ komponenty provßdφme kontrolu v okam╛iku, kdy komponenta ztrßcφ zaost°enφ. Vytvo°φme tedy obsluhu udßlosti OnExit tΘto komponenty. Jeliko╛ tuto obsluhu budeme pou╛φvat i pro dal╣φ editaΦnφ ovladaΦe, nem∙╛eme se odkazovat p°φmo na Edit2. Obsluha bude vypadat tedy takto:
    if (((TEdit *)Sender)->Text != ""){
      int Cislo = StrToIntDef(((TEdit *)Sender)->Text,-1);
      if (Cislo == -1){
        ShowMessage("Hodnota v editaΦnφm ovladaΦi Φ. " +
          IntToStr(((TEdit *)Sender)->Tag) + " je nep°φpustnß.");
        ((TEdit *)Sender)->SetFocus();
      }
    }
    T°etφ komponenta testuje sprßvnost p°i ka╛dΘ zm∞n∞. Vytvo°φme tedy obsluhu udßlosti OnChange pro tento ovladaΦ. Obsluha je tvo°ena stejn²mi p°φkazy jako p°edchozφ obsluha. ╚tvrtß komponenta povoluje zapisovat pouze Φφslice a stisk klßvesy Backspace. Zajistφme to obsluhou udßlosti OnKeyPress.
    if((Key != 8)&((Key < '0')|(Key > '9'))){
      Key = 0;
      MessageBeep(0xFFFF);
    }
    U tΘto obsluhy, znaky kterΘ nechceme propustit do editaΦnφho ovladaΦe zm∞nφme na znak s k≤dem 0 (Key je parametr obsluhy, kter² obsahuje p°eΦten² znak). Parametr u funkce MessageBeep zp∙sobuje pφpnutφ. U poslednφho editaΦnφho ovladaΦe jsou najednou pou╛ity obsluhy z druhΘho a╛ ΦtvrtΘho ovladaΦe (nezapisujte je znova, pouze je ovladaΦi p°i°a∩te). Aplikaci vyzkou╣ejte a v dal╣φch vytvß°en²ch aplikacφch pou╛φvejte vhodnΘ kontroly p°i zadßvßnφ dat.
  5. Vytvo°te aplikaci, kde na formulß° umφstφte editaΦnφ ovladaΦ a zajistφte, aby ovladaΦ p°ijφmal pouze pφsmena anglickΘ abecedy. P°φpadnß malß pφsmena zm∞≥te na velkß.
  6. Kdy╛ u╛ivatel stiskne n∞kterΘ tlaΦφtko my╣i, pokud ukazatel my╣i je nad formulß°em (nebo nad n∞kterou komponentou) vznikß udßlost OnMouseDown. Obdobn∞ p°i uvoln∞nφ tlaΦφtka je generovßna udßlost OnMouseUp. Dal╣φ udßlost se vztahuje k pohybu my╣i. Je to udßlost OnMouseMove. Toto jsou zßkladnφ udßlosti t²kajφcφ se my╣i. Do tΘto skupiny udßlostφ pat°φ i udßlost OnClick, kterou jsme ji╛ Φasto pou╛φvali. Udßlost kliknutφ se t²kß pouze levΘho tlaΦφtka my╣i, ale ostatnφ z t∞chto udßlostφ se t²kajφ i dal╣φch tlaΦφtek. My╣ m∙╛e mφt dv∞ nebo t°i tlaΦφtka (prost°ednφ tlaΦφtko my╣i se v∞t╣inou nepou╛φvß, nebo╗ nemßme jistotu, ╛e v╣ichni u╛ivatelΘ na╣φ aplikace budou vlastnit t°φtlaΦφtkovou my╣).

  7. Obsluha udßlosti OnMouseDown mß p∞t parametr∙. Prvnφ z nich je obvykl² parametr Sender. Dal╣φ parametr Button indikuje, kterΘ tlaΦφtko my╣i bylo stisknuto. Mo╛nΘ hodnoty tohoto parametru jsou: mbRight, mbLeft nebo mbCenter. T°etφ parametr (Shift) urΦuje, kterΘ klßvesy (z Alt, Ctrl nebo Shift) byly p°i v²skytu udßlosti stisknuty. Tento parametr je typu mno╛ina (najednou m∙╛e b²t stisknuto vφce klßves). Poslednφ dva parametry (X a Y) urΦujφ sou°adnice (v sou°adnΘm systΘmu u╛ivatelskΘ plochy okna) ukazatele my╣i v okam╛iku stisku tlaΦφtka my╣i.
    ZaΦneme novou aplikaci. Formulß° tΘto aplikace neobsahuje ╛ßdnΘ komponenty. Vytvo°φme obsluhu udßlosti OnMouseDown formulß°e, kterß je tvo°ena p°φkazem:
    if (Button == mbLeft) Canvas->Ellipse(X-10, Y-10, X+10, Y+10);
    Jestli╛e p°i spu╣t∞nΘ aplikaci u╛ivatel stiskne levΘ tlaΦφtko my╣i, je na formulß°i nakreslen kruh. Pro nakreslenφ kruhu pou╛φvßme metodu Ellipse, nebo╗ metoda pro nakreslenφ kruhu neexistuje. Metoda Ellipse vy╛aduje Φty°i parametry, reprezentujφcφ protilehlΘ strany opsanΘho obdΘlnφku.
    Kreslenφ provßdφme na plßtno formulß°e, tj. na jeho vlastnost Canvas. Objekt Canvas mß dv∞ odli╣nΘ funkce: obsahuje sbφrku nßstroj∙ pro kreslenφ (je to pero a ╣t∞tec) a mß °adu kreslφcφch metod, kterΘ pou╛φvajφ aktivnφ nßstroje.
    Pokuste se roz╣φ°it funkci uvedenΘ obsluhy takto: Jestli╛e p°i stisknutφ tlaΦφtka my╣i je stisknuta klßvesa Shift, pak nekreslete kruh, ale Φtverec; objekt Canvas mß pro nakreslenφ obdΘlnφku metodu Rectangle, kterou m∙╛eme pou╛φt i k nakreslenφ Φtverce. Podmφnka zji╣╗ujφcφ, zda je stisknutß klßvesa Shift je
    (Shift.Contains(ssShift))
    Vytvo°φme je╣t∞ obsluhu udßlosti OnMouseMove, tvo°enou p°φkazy:
    char Pom[30];
    sprintf(Pom, "Sou°adnice: x = %d, y = %d", X, Y);
    Caption = AnsiString(Pom);
    kterß nßs informuje o sou°adnicφch ukazatele my╣i. DokonΦete tuto aplikaci a vyzkou╣ejte. Pov╣imn∞te si, ╛e kdy╛ nakreslφme n∞kolik tvar∙ na formulß° a formulß° p°ekryjeme jin²m oknem, pak po odstran∞nφ p°ekr²vajφcφho okna se na╣e kresba neobnovφ. Je to implicitnφ chovßnφ oken. Ve v²voji tΘto aplikace budeme pokraΦovat, a╛ se seznßmφme s vytvß°enφm nabφdky.
  8. Nynφ se budeme podrobn∞ji zab²vat komponentami. Nejprve se zmφnφme o vlastnosti Name. Hodnotu tΘto vlastnosti generuje C++ Builder, ale my ji m∙╛eme zm∞nit. Hodnotu tΘto vlastnosti pou╛φvßme, kdy╛ se na komponentu odkazujeme z k≤du. Pokud zm∞nφme hodnotu vlastnosti Name v Inspektoru objekt∙, pak C++ Builder provede pot°ebnΘ zm∞ny na mnoha mφstech. Nedokß╛e ale zm∞nit na╣e odkazy na komponentu ze zdrojovΘho k≤du, kter² jsme ji╛ vytvo°ili. Z tohoto d∙vodu je vhodnΘ nejprve komponenty p°ejmenovat a teprve potom se na p°ejmenovanou komponentu odkazovat. Nesmφme nikdy m∞nit vlastnost Name za b∞hu aplikace. Nikdy nesmφme m∞nit jmΘno komponenty (jmΘno, kterΘ C++ Builder p°i°azuje ukazateli na komponentu) nebo jmΘno obsluhy udßlosti v Editoru k≤du. Pokud provedeme n∞kterou z t∞chto akcφ, pak C++ ztrßcφ stopu komponenty a v²sledek nenφ dobr². M∙╛e to zp∙sobit ztrßtu mo╛nosti zavedenφ na╣eho formulß°e. Jedin² bezpeΦn² zp∙sob zm∞ny vlastnosti Name a jmΘna obsluh udßlostφ je pomocφ Inspektora objekt∙.
  9. V╣echny komponenty majφ n∞kterΘ vlastnosti spoleΦnΘ (nap°. Left, Top apod.). S n∞kter²mi jsme se ji╛ seznßmili. Nynφ se podφvßme na n∞kterΘ dal╣φ. Vlastnost Color urΦuje barvu pozadφ komponenty. Barvu v Inspektoru objekt∙ lze vybφrat z rozbalovacφho seznamu barev. Pokud dvojit∞ klikneme na hodnot∞ vlastnosti Color, pak je zobrazeno dialogovΘ okno volby barev, ze kterΘho je mo╛no vybrat libovolnou barvu (okno je stejnΘ jako komponenta ColorDialog).

  10. Vlastnost Cursor urΦuje jak² kurzor bude zobrazen p°i p°esunu my╣i na komponentou. Pro n∞kterΘ komponenty je kurzor automaticky m∞n∞n (nap°. Edit, Memo apod.). K umo╛n∞nφ °φzenφ kurzoru je nutno nastavit vlastnost Cursor na crDefault. Pokud mßme specializovanΘ komponenty, pak m∙╛eme specifikovat jin² tvar kurzoru. Kdy╛ kurzor my╣i je nad touto komponentou, pak kurzor zm∞nφ sv∙j tvar. ╚asto m∞nφme kurzor za b∞hu aplikace. Nap°. dlouhΘ procesy jsou indikovßny zm∞nou tvaru kurzoru na p°esφpacφ hodiny. Po dokonΦenφ procesu je vhodnΘ vrßtit kurzoru jeho p∙vodnφ tvar. To lze provΘst nap°. nßsledujφcφm k≤dem:
    TCursor staryKurzor = Screen->Cursor;
    Screen->Cursor = crHourGlass;
    // provedenφ n∞Φeho, co dlouho trvß
    Screen->Cursor = staryKurzor;
    Jinß vlastnost kurzoru my╣i, DragCursor je pou╛φvßna k nastavenφ kurzoru, kter² je pou╛it kdy╛ kurzor je nad komponentou, kterß podporuje ta╛enφ.
    Vlastnost Enabled urΦuje, zda komponenta je povolena nebo zakßzßna. Pokud vlastnost Enabled nastavφme na true, pak komponenta je povolena, p°i nastavenφ na false je zakßzßna. ZakßzanΘ komponenty nemohou zφskat zaost°enφ a obvykle majφ pozm∞n∞n vzhled. Pokud zakß╛eme komponentu panelu, kterß obsahuje dal╣φ komponenty, pak zakß╛eme i tyto komponenty.
    Vlastnost Font je instance t°φdy TFont, kterß mß svΘ dal╣φ vlastnosti. Vlastnost Color nastavuje barvu pφsma a vlastnost Name typ pφsma. Vlastnosti Height a Size jsou svßzanΘ. Height je pou╛φvßna k zadßnφ v²╣ky pφsma v obrazov²ch prvcφch a Size v bodech. Zm∞nφme-li jednu z t∞chto vlastnostφ, pak se automaticky zm∞nφ druhß. Height je Φasto zßpornΘ Φφslo. Vlastnost Pitch nenφ mnoho pou╛φvanß. Umo╛≥uje v p°φpad∞ pou╛itφ proporcionßlnφho pφsma jeho zm∞nu na neproporcißlnφ. Vlastnost Style urΦuje styl pφsma.
    Vlastnost Hint je pou╛φvßna k nastavenφ textu nßpov∞dy pro komponentu. Text nßpov∞dy mß dv∞ Φßsti. Prvnφ Φßst je n∞kdy naz²vanß krßtkß nßpov∞da. Je to text, kter² je zobrazen, kdy╛ u╛ivatel umφstφ kurzor my╣i nad komponentu (bublinkovß nßpov∞da). Druhß Φßst textu nßpov∞dy se n∞kdy naz²vß dlouhß nßpov∞da. Dlouhß nßpov∞da m∙╛e b²t nap°. zobrazovßna na stavovΘm °ßdku. Tyto Φßsti nßpov∞dy odd∞lujeme znakem |. Nap°. pro tlaΦφtko otev°enφ souboru to m∙╛e b²t:
    Otev°φt|Otevφrß soubor pro editaci.
    Zobrazovßnφ krßtkΘ nßpov∞dy je ovlßdßno vlastnostφ ShowHint (mß-li ShowHint hodnotu true, pak nßpov∞da je zobrazovßna). Zobrazovßnφ dlouhΘ nßpov∞dy dß vφce prßce (seznßmφme se s nφ pozd∞ji). M∙╛eme zadat text krßtkΘ nßpov∞dy, text dlouhΘ nßpov∞dy nebo oba texty. Jestli╛e nepou╛ijeme znak |, pak texty obou nßpov∞d jsou stejnΘ.
    Vlastnosti ParentColor, ParentCtl3D, ParentFont a ParentShowHint pracujφ stejn²m zp∙sobem a jsou zde popsßny spoleΦn∞. Kdy╛ tyto vlastnosti jsou nastaveny na true, pak vlastnosti Color, Ctl3D, Font a ShowHint zφskßvajφ hodnotu stejnΘ vlastnosti nad°φzenΘ komponenty. Nap°. pro v∞t╣inu komponent je vlastnost ParentFont nastavena na true. To znamenß, ╛e tyto komponenty zd∞dφ pφsmo od svΘ nad°φzenΘ komponenty. Zm∞nφme-li hodnotu vlastnosti ParentFont na false, pak pφsmo nebude ovliv≥ovßno zm∞nou pφsma nad°φzenΘ komponenty.
    Vlastnost Tag nenφ nic vφce ne╛ 4 slabiky pam∞ti, poskytnutΘ u╛ivateli. Je zde mo╛no uklßdat cokoliv (ukazatel na jinou t°φdu, hodnotu indexu, celΘ Φφslo apod.).
    Vlastnost Ctl3D urΦuje, zda ovladaΦ bude mφt t°φrozm∞rn² okraj. Vlastnost HelpContext p°i°azuje index nßpov∞dnΘho souboru k jistΘ komponent∞.
  11. Je asi 20 metod, kterΘ jsou spoleΦnΘ pro v∞t╣inu komponent. WindowsovskΘ komponenty t∞chto spoleΦn²ch metod majφ vφce ne╛ 40. Mnoho funkΦnosti komponent je realizovßno vlastnostmi. Nap°. k ukrytφ komponenty m∙╛eme volat metodu Hide nebo m∙╛eme nastavit vlastnost Visible na false. V nßsledujφcφ tabulce je uvedeno n∞kolik metod spoleΦn²ch pro v∞t╣inu komponent.

  12.  
    Metoda Popis
    Broadcast Pou╛φvß se k zaslßnφ zprßvy v╣em pod°φzen²m Windowsovsk²m komponentßm.
    ClientToScreen P°evßdφ sou°adnice klientskΘho okna na sou°adnice obrazovky.
    ContainsControl Vracφ true, pokud specifikovanß komponenta je pod°φzenou komponentou.
    HandleAllocated Vracφ true, pokud vlastnost Handle pro komponentu byla vytvo°ena. ╚tenφm vlastnosti Handle je madlo automaticky vytvo°eno. HandleAllocated lze pou╛φt k testovßnφ existence madla bez jeho vytvo°enφ.
    Hide Skr²vß komponentu. Komponenta stßle existuje a m∙╛e b²t pozd∞ji op∞t zobrazena.
    Invalidate Po╛adavek na p°ekreslenφ komponenty. Komponentu p°ekreslφ Windows p°i nejbli╛╣φ p°φle╛itosti.
    Perform Zaslßnφ zprßvy p°φmo komponent∞ (namφsto pou╛itφ systΘmu zprßv Windows).
    Refresh Po╛adavek na bezprost°ednφ p°ekreslenφ komponenty s vymazßnφm komponenty p°ed p°ekreslenφm.
    Repaint Po╛adavek na bezprost°ednφ p°ekreslenφ komponenty (pozadφ komponenty nenφ p°ed p°ekreslenφm vymazßno).
    SetBounds Umo╛≥uje najednou nastavit vlastnosti Top, Left, Width a Height.
    SetFocus Nastavuje zaost°enφ na komponentu a d∞lß ji aktivnφ (lze pou╛φt pouze pro WindowsovskΘ komponenty).
    Update Provede bezprost°ednφ p°ekreslenφ ovladaΦe. Obvykle k p°ekreslenφ komponenty pou╛φvßme Refresh nebo Repaint.
  13. Existuje takΘ n∞kolik udßlostφ, kterΘ se t²kajφ v∞t╣iny komponent. Jejich popis je uveden v nßsledujφcφ tabulce:

  14.  
    Udßlost Popis
    OnChange Tato udßlost nastßvß, kdy╛ se ovladaΦ zm∞nφ. P°esnß implementace zßvisφ na komponent∞.
    OnClick Nastßvß p°i kliknutφ my╣i na komponent∞.
    OnDblClick Nastßvß p°i dvojitΘm kliknutφ my╣φ na komponent∞.
    OnEnter Nastßvß, kdy╛ Windowsovskß komponenta zφskß zaost°enφ (je aktivovßna).
    OnExit Nastßvß, kdy╛ Windowsovskß komponenta ztratφ zaost°enφ v d∙sledku p°echodu na jin² ovladaΦ. Nenastßvß p°i p°epnutφ na jin² formulß° nebo jinou aplikaci.
    OnKeyDown Nastßvß, kdy╛ v dob∞ zaost°enφ ovladaΦe u╛ivatel stiskne libovolnou klßvesu klßvesnice.
    OnKeyPress Nastßvß takΘ p°i stisku klßvesy u╛ivatelem (pouze pro alfanumerickΘ klßvesy, Tab, Backspace, Enter a Esc).
    OnKeyUp Nastßvß p°i uvoln∞nφ klßvesy.
    OnMouseDown Stisknutφ tlaΦφtka my╣i nad komponentou.
    OnMouseMove P°esun my╣i.
    OnMouseUp Uvoln∞nφ tlaΦφtka my╣i.
    OnPaint Nastßvß, kdy╛ komponenta pot°ebuje p°ekreslit. Na tuto udßlost m∙╛eme reagovat u╛ivatelsk²m p°ekreslenφm komponenty.

    P°i prßci s udßlostmi my╣i je nutno si uv∞domit, ╛e nap°. udßlost dvojitΘho kliknutφ je ve skuteΦnosti tato °ada udßlostφ:

    Nenφ tedy vhodnΘ reagovat na v╣echny udßlosti, ale pouze na OnDblClick (totΘ╛ platφ o OnClick). Obdobn∞ stisknutφ klßvesy v editaΦnφm ovladaΦi zp∙sobφ generovßnφ udßlostφ OnKeyDown, OnKeyPres, OnChange a OnKeyUp.
  15. T°φda TStrings je t°φda VCL, kterß udr╛uje seznam °et∞zc∙. N∞kterΘ komponenty VCL pou╛φvajφ instance TStrings k udr╛ovßnφ sv²ch dat. Nap°. vlastnost Lines komponenty Memo je instance t°φdy TStrings. Metoda SaveToFile p°ebφrß °et∞zce a uklßdß je do souboru na disk. Obdobn∞ lze p°eΦφst seznam °et∞zc∙ ze souboru. V p°φpad∞ t°φdy TListBox, vlastnost obsahujφcφ seznam °et∞zc∙ je nazvanß Items. Ukß╛eme si to na nßsledujφcφ aplikaci. Vytvo°φme novou aplikaci a na formulß° umφstφme komponentu ListBox. Dvojit∞ klikneme na formulß° (ne na ListBox) a vytvo°φme obsluhu OnCreate formulß°e s obsahem:

  16. char winDir[256], fileName[256];
    GetWindowsDirectory(winDir, sizeof(winDir));
    sprintf(fileName, "%s\\win.ini", winDir);
    ListBox1->Items->LoadFromFile(fileName);
    Kdy╛ tento program spustφme, pak komponenta ListBox obsahuje obsah souboru WIN.INI. Komponenta ComboBox mß takΘ vlastnost Items, kterß pracuje stejn²m zp∙sobem. U ListBox, ComboBox a Memo lze p°idßvat, ru╣it, vklßdat a p°esouvat prvky volßnφm metod Add, Append, Delete, Insert a Move t°φdy TStrings. Vlastnost Sorted urΦuje, zda seznam °et∞zc∙ bude abecedn∞ se°azen. P°i nastavenφ na false, metoda Add vklßdß nov² °et∞zec na konec seznamu. Seznam °et∞zc∙ m∙╛e b²t vyprßzdn∞n metodou Clear. JednotlivΘ °et∞zce mohou b²t zp°φstup≥ovßny pomocφ vlastnosti Strings a operßtoru indexace, nap°. k zφskßnφ prvnφho °et∞zce ze seznamu °et∞zc∙ pou╛ijeme:
    Edit1->Text = ListBox1->Items->Strings[0];
    Ka╛d² °et∞zec v poli TStrings obsahuje samotn² °et∞zec a Φty°i slabiky se specißlnφm v²znamem. Tyto Φty°i slabiky jsou zp°φstupn∞ny vlastnostφ Objects. M∙╛eme je pou╛φt pro libovolnΘ ·Φely. Nap°. m∙╛eme vytvo°it seznam s u╛ivatelsk²m zobrazovßnφm jednotliv²ch prvk∙, kter² bude zobrazovat bitovΘ mapy. ╪et∞zce ulo╛φme obvykl²m zp∙sobem a do pole Objects ulo╛φme ukazatele na objekty TBitmap.
    N∞kdy pot°ebujeme pracovat se seznamem °et∞zc∙, ale tento seznam nenφ spojen se ╛ßdnou komponentou. Pro tyto ·Φely je mo╛no pou╛φt t°φdu TStringList. Pracuje stejn∞ jako TStrings, ale nenφ spojena se ╛ßdnou komponentou.
    Ve skuteΦnosti TStrings je abstraktnφ t°φda. Abstraktnφ t°φdu nikdy nepou╛φvßme p°φmo, ale slou╛φ jako zßklad pro odvozovßnφ dal╣φch t°φd. Vlastnost Lines je instance t°φdy TMemoStrings, kterß je odvozena od t°φdy TStrings. Vlastnost Lines je deklarovßna jako ukazatel na TStrings, ale ve skuteΦnosti se jednß o instanci TMemoStrings.
  17. Dßle se postupn∞ budeme seznamovat s jednotliv²mi komponentami. ZaΦneme editaΦnφmi komponentami. C++ Builder obsahuje Φty°i editaΦnφ komponenty. Komponenty Edit, Memo a MaskEdit jsou zalo╛eny na standardnφch Windowsovsk²ch editaΦnφch ovladaΦφch. Komponenta RichEdit je zalo╛ena na editaΦnφm ovladaΦi Win32 (nejednß se o standardnφ Windowsovsk² ovladaΦ). Tyto komponenty majφ mnoho v∞cφ spoleΦn²ch a jsou zde popsßny spoleΦn∞.

  18. Komponenta Edit zaobaluje zßkladnφ jedno°ßdkov² editaΦnφ ovladaΦ. Tato komponenta nemß vlastnosti Align (zarovnßnφ tΘto komponenty k n∞kterΘmu okraji nemß v²znam) a Alignment. Vlastnost Alignment nemß, proto╛e text v tomto ovladaΦi je v╛dy zarovnßvßn zleva (pokud pot°ebujeme jinΘ zarovnßvßnφ, pak je mo╛no pou╛φt nap°. komponentu Memo o v²╣ce jednoho °ßdku).
    Komponenta MaskEdit je komponenta Edit s p°idan²m vstupnφm filtrem (maskou). Nejednß se o Windowsovsk² ovladaΦ, ale o VCL roz╣φ°enφ standardnφho editaΦnφho ovladaΦe. Vlastnost EditMask urΦuje pou╛itou masku. Maska je urΦena k vynucenφ specifickΘho tvaru vstupu (p°i zadßvßnφ hodnot s n∞jakou strukturou, nap°. telefonnφch Φφsel tvaru (040)4356-654). Je mo╛no ji takΘ pou╛φvat p°i zadßvßnφ datum∙ a Φasu, ale v t∞chto p°φpadech je vhodn∞j╣φ pou╛φt komponentu DateTimePicker; je na strßnce Win32 palety komponent - vlastnostφ Kind urΦujeme, zda se bude zadßvat datum nebo Φas.
    Komponenta Meno zaobaluje vφce°ßdkov² editaΦnφ ovladaΦ. Jednou z nejd∙le╛it∞j╣φch vlastnostφ tΘto komponenty je vlastnost Lines. Vlastnost ScrollBars urΦuje, kterΘ posuvnφky jsou pou╛ity. Jednß se o znaΦn∞ p°izp∙sobivou komponentu, kterß je Φasto pou╛φvanß.
    Komponenta RichEdit je nejv∞t╣φ a nejlep╣φ ze v╣ech editaΦnφch komponent. Je zalo╛ena na editaΦnφm ovladaΦi typu Rich Win32. Tato komponenta umo╛≥uje m∞nit pφsmo a styly pφsma, pou╛φvat odsazenφ a mnoho dal╣φch mo╛nostφ. Je mo╛no ji pou╛φt jako zßklad textovΘho procesoru.
    V nßsledujφcφ tabulce jsou uvedeny vlastnosti t²kajφcφ se editaΦnφch komponent.
     
    Vlastnost T²kß se Popis
    AutoSelect Edit, MaskEdit P°i nastavenφ na true, text v ovladaΦi je p°i vstupu do ovladaΦe automaticky vybrßn. Implicitnφ hodnota je true.
    AutoSize Edit, MaskEdit P°i nastavenφ na true, editaΦnφ ovladaΦ automaticky m∞nφ svou velikost p°i zm∞n∞ pφsma. P°i false velikost nenφ m∞n∞na. Implicitnφ hodnota true.
    CharCase Edit, MaskEdit UrΦuje, zda editaΦnφ ovladaΦ zobrazuje velkß (ecUpperCase), malß (ecLowerCase) nebo smφ╣enß pφsmena (ecNormal). Implicitn∞: ecNormal.
    HideScrollBars RichEdit P°i nastavenφ na true, jsou posuvnφky zobrazeny pouze tehdy, pokud jsou zapot°ebφ. P°i nastavenφ na false jsou posuvnφky zobrazeny podle hodnoty vlastnosti ScrollBars.
    HideSelection Edit, Memo, RichEdit P°i nastavenφ na true vybran² text nenφ zobrazen jako vybran², kdy╛ u╛ivatel p°ejde na jin² ovladaΦ. Implicitne: false.
    Lines Memo, RichEdit Text obsa╛en² v komponent∞. Je to instance t°φdy TStrings.
    MaxLength V╣echny Specifikuje maximßlnφ poΦet znak∙, kter² komponenta m∙╛e obsahovat. P°i nastavenφ na 0, dΘlka textu nenφ omezena. Implicitn∞: 0.
    OEMConvert Edit, Memo Tuto vlastnost nastavφme na true, kdy╛ zadßvan² text obsahuje jmΘna soubor∙. Implicitn∞: false.
    PasswordChar Edit, MaskEdit Kdy╛ tato vlastnost je nastavena na jinou hodnotu ne╛ ASCII #0, pak libovoln² zadßvan² text je nahrazovßn zde urΦen²m znakem. Pou╛φvß se v ovladaΦφch pro zadßvßnφ hesla.
    PlainText RichEdit P°i nastavenφ na true, pak text je zobrazen bez znakovΘho a paragrafovΘho formßtovßnφ. P°i nastavenφ na false je pou╛ito plnΘ formßtovßnφ. Implicitn∞: false.
    ReadOnly V╣echny P°i nastavenφ na true komponenta zobrazuje text, ale neumo╛≥uje jeho editaci. Vybran² text je mo╛no zkopφrovat do schrßnky. Implicitn∞: false.
    ScrollBars Memo, RichEdit UrΦuje zobrazenφ posuvnφk∙.
    Text Edit, MaskEdit Text obsa╛en² v komponent∞.
    WantReturns Memo, RichEdit P°i nastavenφ na true, komponenta zachytφ znaky od°ßdkovßnφ a tyto znaky jsou vlo╛eny do editaΦnφho ovladaΦe. P°i nastavenφ na false znaky od°ßdkovßnφ jsou p°edßny nad°φzenΘ komponent∞ a do textu komponenty nejsou vlo╛eny. Implicitn∞: true.
    WantTabs Memo, RichEdit P°i nastavenφ na true, komponenta zachytφ znak Tab a vlo╛φ jej do textu. P°i nastavenφ na false, jsou znaky Tab p°edßny nad°φzenΘ komponent∞. Implicitn∞: false.
    WordWrap Memo, RichEdit P°i nastavenφ na true zadan² text je zalamovßn u pravΘho okraje ovladaΦe. P°i nastavenφ na false editaΦnφ ovladaΦ automaticky roluje nov∞ zadßvan²m textem. Implicitn∞: true.
    Vlastnosti pou╛itelnΘ za b∞hu aplikace
    Modified V╣echny Indikuje, zda obsah editaΦnφ komponenty byl od poslednφho nastavenφ tΘto vlastnosti zm∞n∞n. Po ulo╛enφ obsahu komponenty Memo a RichEdit do souboru je vhodnΘ tuto vlastnost nastavit na false.
    SelLength V╣echny Obsahuje dΘlku prßv∞ vybranΘho textu.
    SelStart V╣echny UrΦuje zaΦßtek vybranΘho textu v editaΦnφm ovladaΦi. Znaky jsou Φφslovßny od 0.
    SelText V╣echny Obsahuje prßv∞ vybran² text v editaΦnφm ovladaΦi.

    EditaΦnφ ovladaΦe majφ mnoho spoleΦn²ch metod. Pro operace se schrßnkou a manipulace s textem to jsou metody: CutToClipboard, CopyToClipboard, PasteFromClipboard a Clear. Metody GetSelTextBuff a GetTextBuff zφskßvajφ vybran² text v komponent∞ a cel² text komponenty. Pokud jde o udßlosti jsou zde OnEnter, OnExit, OnChange, OnKeyDown (nebo OnKeyPress) a OnKeyUp.

  19. Komponenty ListBox a ComboBox jsou takΘ Φasto pou╛φvanΘ. Komponenta ListBox reprezentuje standardnφ okno seznamu Windows, kterΘ prezentuje seznam voleb, ve kterΘm u╛ivatel m∙╛e vybφrat. Pokud je zde vφce prvk∙, pak je zobrazen posuvnφk. Jsou takΘ okna seznam∙, kterΘ jsou zobrazovßny vlastnφkem seznamu. V t∞chto oknech seznamu je za zobrazovßnφ prvk∙ zodpov∞dn² programßtor.

  20. KombinovanΘ ovladaΦe jsou specializovanΘ okna seznam∙. Jednß se o kombinaci okna seznamu a editaΦnφho ovladaΦe. U╛ivatel m∙╛e volit ze seznamu nebo zapsat hodnotu do editaΦnφ Φßsti. Kdy╛ u╛ivatel zvolφ prvek ze seznamu, pak prvek je umφst∞n do editaΦnφho ovladaΦe. Jsou t°i typy kombinovan²ch ovladaΦ∙ (viz nßsledujφcφ tabulka):
     
    Typ Popis
    Simple Jednß se pouze o editaΦnφ ovladaΦ umφst∞n² nad oknem seznamu. U╛ivatel m∙╛e vybφrat v seznamu nebo zapsat text do editaΦnφ Φßsti.
    DropDown Podobß se p°edchozφmu, ale Φßst okna seznamu nenφ zobrazena (zobrazφ se a╛ kdy╛ u╛ivatel klikne na rozbalovacφ tlaΦφtko). U╛ivatel m∙╛e vybφrat v seznamu nebo zapsat text do editaΦnφ Φßsti.
    DropDownList Podobß se p°edchozφmu, ale nenφ mo╛no zapisovat do editaΦnφ Φßsti. Je vhodn², pokud u╛ivatel provßdφ volbu pouze z p°eddefinovanΘ mno╛iny voleb.

    Vlastnosti oken seznam∙ a kombinovan²ch ovladaΦ∙ jsou popsßny v nßsledujφcφ tabulce:
     

    Vlastnost T²kß se Popis
    Columns ListBox UrΦuje poΦet sloupc∙ v okn∞ seznamu. M∙╛eme vytvo°it vφcesloupcov² seznam. Implicitn∞: 0. 
    ExtendedSelection ListBox UrΦuje, zda je povolen roz╣i°ujφcφ v²b∞r (kliknutφ p°i stisknutΘ klßvese Shift nebo Ctrl). Mß efekt pouze pokud MultiSelect je nastaveno na true. Implicitn∞: true.
    IntegralHeight ListBox P°i true je upravena v²╣ka okna seznamu tak, aby se nezobrazovaly ne·plnΘ °ßdky. P°i false m∙╛e b²t poslednφ °ßdek ne·pln². Implicitn∞: false.
    ItemHeight Oba UrΦuje v²╣ku prvku v ovladaΦi. Pou╛φvß se u oken vlastnφkem kreslen²ch seznam∙ a kombinovan²ch ovladaΦ∙. Implicitn∞: 13.
    Items Oba Obsahuje seznam prvk∙ okna seznamu. Je to instance TString.
    MaxLength ComboBox Maximßlnφ poΦet znak∙, kterΘ u╛ivatel m∙╛e zapsat do editaΦnφ Φßsti kombinovanΘho ovladaΦe. Implicitn∞: 0 (bez omezenφ).
    MultiSelect ListBox P°i true je mo╛n² v²b∞r vφce prvk∙. Implicitn∞: false.
    Sorted Oba P°i nastavenφ na true jsou prvky seznamu se°azeny abecedn∞, p°i false nenφ jejich po°adφ m∞n∞no. Implicitn∞: false.
    Style Oba UrΦuje styl ovladaΦe.
    TabWidth ListBox Nastavuje tabelaΦnφ ╣φ°ku v bodech pro tabelovanΘ seznamy. Implicitn∞: 0.
    Text ComboBox Obsahuje text v editaΦnφ Φßsti kombinovanΘho ovladaΦe.
    Vlastnosti pou╛itelnΘ za b∞hu aplikace
    ItemIndex ListBox Obsahuje index souΦasn∞ vybranΘho prvku (Φφslovßno od 0). Pokud nenφ vybrßn ╛ßdn² prvek, pak je zde hodnota -1. Zßpisem indexu vybereme specifikovan² index.
    SelCount ListBox PoΦet vybran²ch prvk∙ ve vφcev²b∞rov²ch seznamech.
    Selected ListBox Vracφ true pokud specifikovan² prvek je vybrßn nebo false nenφ-li vybrßn.
    SelLength ComboBox Vracφ dΘlku vybranΘho textu v editaΦnφ Φßsti kombinovanΘho ovladaΦe.
    SelStart ComboBox Obsahuje poΦßtek vybranΘho textu v editaΦnφ Φßsti (Φφslovßno od nuly).
    SelText ComboBox Obsahuje prßv∞ vybran² text v editaΦnφ Φßsti.
    TopIndex ListBox Vracφ index prvku prßvΘ zobrazenΘho v prvnφm °ßdku. Lze i nastavovat.

    Metoda Clear ru╣φ v╣echna data komponenty. Metoda ItemAtPos vracφ prvek seznamu, kter² se nachßzφ na specifikovan²ch sou°adnicφch (x, y). Metoda SelectAll vybere v╣echen text v editaΦnφ Φßsti kombinovanΘho ovladaΦe. NejΦast∞ji pou╛φvanß udßlost u oken seznam∙ a kombinovan²ch ovladaΦ∙ je OnClick. Touto udßlostφ je mo╛no urΦit, zda v²b∞r byl proveden v seznamu (kliknutφ na editaΦnφ Φßsti kombinovanΘho ovladaΦe nebo na rozbalovacφm tlaΦφtku tuto udßlost negeneruje). Udßlost OnChange se pou╛φvß k detekovßnφ zm∞ny editaΦnφ Φßsti kombinovanΘho ovladaΦe. Udßlost OnDropDown vznikß p°i stisknutφ rozbalovacφho tlaΦφtka, Udßlosti OnMeasureItem a OnDrawItem jsou pou╛φvßny u oken vlastnφkem kreslen²ch seznam∙.
    S dal╣φmi typy komponent se seznßmφme pozd∞ji.

16. Formulß°e III