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