Umíme to s Delphi – 4. díl: vlastnosti komponent

V minulém díle jsme si řekli, že každá komponenta má své vlastnosti. Jejich správné nastavení je stejně důležité jako vlastní volba komponent. Vlastnosti modifikují nejen vzhled komponenty, ale také její chování.
V minulém díle jsme si řekli, že každá komponenta má své vlastnosti. Jejich správné nastavení je stejně důležité jako vlastní volba komponent. Vlastnosti modifikují nejen vzhled komponenty, ale také její chování. Mnohé vlastnosti jsou společné pro více komponent, ale na druhou stranu skoro každá komponenta má několik svých „unikátních“ vlastností.

Co jsou to vlastnosti

Obecně řečeno, vlastnosti jsou atributy tříd, které určují stav objektu (v našem případě komponenty) a jeho chování. Neznáte-li pojmy jako atribut, třída či objekt, nezoufejte, při práci v Delphi se bez nich zpočátku hravě obejdete. Během tvorby aplikace můžeme zjistit (a modifikovat) hodnotu vlastnosti pomocí Object Inspectoru (viz obrázek). Za běhu aplikace je možné k vlastnostem přistupovat pomocí čtení a zápisu zprostředkovanými jednoduchým programovým kódem.

V Object Inspectoru nalezneme pouze ty vlastnosti, které jsou přístupné v době návrhu aplikace. Kromě nich ovšem existují tzv. run-time vlastnosti (vlastnosti běžící komponenty). Ty jsou přístupné až při běhu aplikace, nikoliv v době návrhu. Aby nebylo teorie málo, rozlišujeme dále read-only a write-only vlastnosti (pouze ke čtení, resp. k zápisu). Dva posledně zmíněné typy jsou obyčejně přístupné jen za běhu aplikace. Jakého typu je vlastnost, kterou právě chcete použít, zjistíte vždy v nápovědě. V dalším textu této kapitoly se budeme zpravidla (avšak nejen) zabývat vlastnostmi přístupnými v době návrhu.

Poznámky pro pokročilé uživatele

  • Z technického hlediska spočívá rozdíl mezi návrhovými a run-time vlastnostmi pouze v tom, že návrhové vlastnosti jsou deklarovány v sekci published deklarace třídy. Vše, co není deklarováno v sekci published, je nepřístupné v době návrhu, a je tedy run-time. Důvodem je fakt, že pro published atributy je generována tzv. runtime type information, která umožňuje Delphi kromě jiného zpřístupnit hodnoty vlastností např. při ukládání a načítání formuláře <.DFM) nebo při zobrazení v Object Inspectoru.
  • Vlastnosti lze přidělit hodnotu nebo lze tuto hodnotu číst, lze ji použít ve výrazu, ale ne vždy lze vlastnost předávat jako parametr do procedury, funkce či metody. Přesněji řečeno – vlastnost můžete použít jako parametr předávaný hodnotou, ale nikoliv odkazem (var).

Společné vlastnosti

Již jsem zmínil, že mnohé vlastnosti jsou společné pro většinu komponent. Nyní se na ty nejdůležitější podíváme.

Jméno a titulek komponenty

Každá komponenta v Delphi má své jméno (vlastnost Name). Pokud nepřidělíte jméno ručně, Delphi pojmenuje komponentu automaticky. Názvy jsou tvořeny složením názvu komponenty (např. Button) a pořadového čísla, např. Button5. Jméno komponenty musí být jedinečné v rámci vlastníka. Zjednodušeně řečeno: můžete mít v aplikaci dva formuláře, z nichž každý obsahuje komponentu stejného jména.

Naproti tomu titulek komponenty (vlastnost Caption) může být zcela libovolný, může obsahovat mezery a může být stejný jako titulky jiných komponent, bez ohledu na vlastníka. Titulek se objeví např. v záhlaví okna (u komponenty Form) nebo přímo na těle tlačítka (Button). Titulkem nelze opatřit zdaleka všechny komponenty, ale jen ty, u kterých to má smysl (dovedete si představit titulek u scrollbaru?).

Velikost a poloha komponenty

Polohu komponenty udávají vlastnosti Left a Top. Souřadnice se nevztahují k celé obrazovce, ale ke klientské oblasti komponenty předka. Znamená to, že umístíte-li na formulář tlačítko, budou se souřadnice tlačítka vztahovat k levému hornímu rohu formuláře. Dáte-li ale na formulář nejprve panel a na něj tlačítko, vztažným bodem pro tlačítko bude levý horní roh panelu.

Velikost komponenty je určována vlastnostmi Height a Width (výška, šířka). Stejně jako v případě polohových vlastností je velikost udávána v pixelech; formulář veliký 1024x768 bude (při stejném rozlišení monitoru) zabírat celou plochu obrazovky.

U některých komponent můžete nastavit, jakým způsobem budou „přichyceny“ k formuláři nebo panelu. Tato vlastnost se jmenuje Align. Většina jejích možných hodnot vás nepřekvapí (alBottom, alTop, alLeft, alRight, alNone), zajímavá je hodnota alClient. Znamená, že komponenta se bude „rozprostírat“ v celé klientské oblasti.

Dostupnost komponenty

Pomocí dvou základních vlastností lze řídit působení uživatele na komponentu. Nastavíte-li hodnotu vlastnosti Enabled na false, komponentu zakážete. V době návrhu nebude mít toto nastavení žádný vizuální efekt, v době běhu aplikace bude komponenta zpravidla šedá, což uživateli naznačí, že je nedostupná (viz obrázek).

Chcete-li být radikálnější, můžete komponentu úplně skrýt, buď použitím příslušné metody nebo nastavením vlastnosti Visible na false.

Poznámka pro pokročilé uživatele

Přečtením vlastnosti Visible ještě nezjistíte, zda je komponenta opravdu viditelná. Je-li totiž skrytý vlastník této komponenty, nic jí nebude platná kladná hodnota její vlastnosti Visible. Z toho důvodu existuje vlastnost Showing, která je typu run-time a read-only. Přečtením její hodnoty zjistíte, zda je prvek pro uživatele v daném okamžiku skutečně viditelný.

Vlastnost Tag

Tag (v překladu přívěsek) je velmi zvláštní vlastnost, protože její nastavení nemá vůbec žádný efekt. Jde pouze o dodatečné paměťové místo, kam lze ukládat různé, libovolné uživatelské hodnoty. Standardně lze do přívěsku uložit hodnotu LongInt (což je celé číslo v rozsahu –2147483648 až 2147483647), ale pomocí přetypování do něj můžete vložit ukazatel nebo cokoliv jiného o velikosti 4 bajty.

Barva a typ písma komponenty

Vlastnosti Color a Font se užívají k úpravě vzhledu komponenty. Samotná vlastnost Color obvykle udává barvu pozadí komponenty. Atribut Color existuje také pro typ písma a mnohých dalších grafických prvků. Název barvy je možné specifikovat pomocí konstant clXXX, kde za XXX dosadíte buďto název barvy (anglicky) nebo název barvy, kterou Windows používají pro systémové prvky. Příklady viz tabulka.

Označení Význam
clGreen zelená barva
clBtnFace barva povrchu tlačítka
clCaptionText barva textu v titulním pruhu aktivního okna
clHighlight barva pozadí vybraného textu
clWindow barva pozadí oken
Další možností je specifikovat barvu číslem.

Poznámka pro pokročilé uživatele

Většina komponent obsahuje také vlastnosti ParentColor a ParentFont udávající, zda má daný prvek používat stávající typ písma a barvu svého vlastníka (kterým je často formulář). Pomocí těchto vlastností můžete změnit písmo každého řídicího prvku formuláře pouhým nastavením vlastnosti Font vlastního formuláře.

Plovoucí nápověda

Velkou výhodou každé aplikace je, když se uživateli zobrazí plovoucí nápověda, jestliže nechá kurzor chvíli bez pohybu nad některým prvkem (např. dozví-li se, co se přesně stane po stisku daného tlačítka). K tomu slouží vlastnost Hint, do které napíšete text nápovědy, a vlastnost ShowHint, která říká, má-li tato nápověda být zobrazena (např. pokročilý uživatel může zobrazování této nápovědy potlačit volbou v menu a vy jen nastavíte ShowHint, příp. ParentShowHint.

Tabulátor

Pokud má vaše aplikace více ovládacích prvků (což má zpravidla vždy), je dobré, aby „inteligentně“ fungovala klávesa Tab. Vytvoříte-li okénko s dotazem typu „opravdu chcete skončit?“, měl by stačit stisk Enteru ke kladné odpovědi. Stisk Tab a Enteru by naopak měl vyvolat zápornou odpověď. Toho lze docílit nastavením vlastností TabOrder a TabStop. TabStop říká, zda se vůbec na danou komponentu lze dostat tabulátorem, a TabOrder říká, kolikátá v pořadí bude. Počítá se od nuly.

Příště: události, překlad, hledání chyb

V příštím díle seriálu se podíváme na události komponent. Protože události již úzce souvisí s „opravdovým programováním“ ve smyslu tvorby programového kódu, řekneme si něco o překladu projektu a především o hledání chyb v programu – tzv. debuggování.
Diskuze (4) Další článek: NEC MultiSync FE700+ stojí za investici

Témata článku: , , , , , , , , , , , , , , , , , , , , , ,