Pochopenie vlastníka vs. Rodič v aplikáciách Delphi

Zakaždým, keď umiestnite panel na formulár a tlačidlo na tomto paneli, vytvoríte „neviditeľné“ spojenie. Formulár sa stáva vlastník tlačidla a panel je nastavený na jeho rodič.

Každý komponent Delphi má vlastnosť Vlastník. Majiteľ sa stará o oslobodzujúce vlastnené komponenty, keď sa uvoľňuje.

Podobná, ale odlišná vlastnosť Parent označuje komponent, ktorý obsahuje komponent „child“.

rodič

Rodič označuje komponent, v ktorom je obsiahnutý iný komponent, napríklad TForm, TGroupBox alebo TPanel. Ak jeden ovládací prvok (rodič) obsahuje ďalšie, obsiahnuté kontroly sú rodičovskými kontrolami rodiča.

Rodič určuje, ako sa komponent zobrazí. Napríklad vlastnosti vľavo a hore sú všetky relatívne k rodičovi.

Vlastnosť Rodič môže byť pri behu priradená a zmenená.

Nie všetky komponenty majú rodičov. Mnoho foriem nemá rodiča. Napríklad formuláre, ktoré sa zobrazujú priamo na pracovnej ploche Windows, majú nastavenú hodnotu Rodič. Komponent je HasParent metóda vráti booleovskú hodnotu označujúcu, či komponentu bol alebo nebol priradený rodič.

instagram viewer

Vlastnosť Parent používame na získanie alebo nastavenie rodiča ovládacieho prvku. Napríklad do formulára vložte dva panely (Panel1, Panel2) a jedno tlačidlo (Button1) umiestnite na prvý panel (Panel1). Týmto sa nastaví vlastnosť tlačidla Parent na Panel1.

 Button1.Parent: = Panel2; 

Ak umiestnite vyššie uvedený kód do udalosti OnClick pre druhý panel, po kliknutí na Panel2 tlačidlo „preskočí“ z Panel1 na Panel2: Panel1 už nie je rodičom pre tlačidlo.

Ak chcete vytvoriť TButton v čase spustenia, je dôležité, aby sme nezabudli priradiť rodiča - ovládací prvok, ktorý obsahuje tlačidlo. Aby bol komponent viditeľný, je musí mať rodiča, ktorý sa v ňom zobrazí.

ParentThis and ParentThat

Ak vyberiete tlačidlo v čase návrhu a pozriete sa na inšpektora objektov, všimnete si niekoľko vlastností „Rodičovský“. ParentFont, napríklad označuje, či je písmo použité pre titulok tlačidla rovnaké ako písmo použité pre rodiča tlačidla (v predchádzajúcom príklade: Panel1). Ak je ParentFont pravdivý pre všetky tlačidlá na paneli, zmena vlastnosti písma v paneli na tučné písmo spôsobí, že všetky titulky tlačidla na paneli použijú toto (tučné) písmo.

Kontroluje majetok

Všetky komponenty, ktoré zdieľajú toho istého rodiča, sú k dispozícii ako súčasť systému riadenie majetok tohto rodiča. Napríklad sa môžu použiť kontroly iterovať všetky deti ovládané oknom.

Ďalšiu časť kódu je možné použiť na skrytie všetkých obsiahnutých komponentov na paneli1:

pre ii: = 0 na Panel1.ControlCount - 1 robiť

 Panel1.Riadenia [ii]. Neviditeľné: = false;


Trikové triky

Okenné ovládacie prvky majú tri základné vlastnosti: môžu sa zamerať na vstupy, používajú systémové prostriedky a môžu byť rodičmi iných ovládacích prvkov.

Napríklad komponent Button je ovládací prvok v okne a nemôže byť rodičom iného komponentu - nemôžete naň umiestniť iný komponent. Ide o to, že spoločnosť Delphi pred nami skrýva túto funkciu. Príkladom je skrytá možnosť, aby TStatusBar obsahoval niektoré komponenty ako TProgressBar.

vlastníctvo

Najprv si uvedomte, že formulár je celkový vlastník všetkých komponentov, ktoré sú na ňom umiestnené (umiestnené vo formulári v čase návrhu). To znamená, že pri zničení formulára sa zničia aj všetky komponenty formulára. Napríklad, ak máme aplikáciu s viac ako jedným formulárom, keď voláme metódu Free alebo Release pre objekt formulára, my nemusíte sa starať o výslovné uvoľnenie všetkých objektov v tomto formulári - pretože formulár je vlastníkom všetkých jeho formulárov komponenty.

Každá súčasť, ktorú vytvoríme, v čase návrhu alebo spustenia, musí byť vo vlastníctve inej súčasti. Vlastník komponentu - hodnota jeho vlastnosti Owner - je určený parametrom odovzdaným konštruktoru Create pri vytvorení komponentu. Jediným iným spôsobom, ako opätovne priradiť vlastníka, je použitie metód InsertComponent / RemoveComponent počas behu programu. V predvolenom nastavení formulár vlastní všetky komponenty v ňom a je zase vo vlastníctve aplikácie.

Keď použijeme kľúčové slovo sám ako parameter pre metódu Create - objekt, ktorý vytvárame, vlastní trieda, v ktorej je metóda obsiahnutá - čo je zvyčajne formulár Delphi.

Ak na druhej strane urobíme z iného komponentu (nie z formy) vlastníka komponentu, potom urobíme tento komponent zodpovedný za vyradenie objektu, keď je zničený.

Ako každý iný Komponent Delphi, zložku TFindFile vyrobenú na mieru je možné vytvoriť, použiť a zničiť za behu. Ak chcete vytvoriť, používať a zadarmo Komponent TFindFile pri spustení môžete použiť nasledujúci útržok kódu:

použitie FindFile;

...
var FFile: TFindFile;

procedúra TForm1.InitializeData;

začať // form ("Self") je vlastníkom komponentu // neexistuje žiadny rodič, pretože tento // je neviditeľný komponent.

 FFile: = TFindFile. Vytvoriť (vlastné);

 ...

koniec;

Poznámka: Pretože súbor FFile je vytvorený s vlastníkom (Form1), nemusíme robiť nič, aby sme uvoľnili komponent - bude uvoľnený, keď bude majiteľ zničený.

Vlastnosť komponentov

Všetky komponenty, ktoré zdieľajú toho istého vlastníka, sú k dispozícii ako súčasť systému Vlastnosť komponentov tohto vlastníka. Nasledujúci postup sa používa na vymazanie všetkých komponentov Edit, ktoré sú vo formulári:

procedúra ClearEdits (AForm: TForm);

var

 ii: celé číslo;

začať

pre ii: = 0 na AFOR. ComponentCount-1 robiť

ak (AFOR. Komponenty [ii] je editačné) potom TEdit (AForm. Komponenty [ii]) Text: = '';

koniec; 

"Siroty"

Niektoré ovládacie prvky (napríklad ovládacie prvky ActiveX) sú obsiahnuté v oknách iných ako VCL, nie v nadradených ovládacích prvkoch. Pre tieto ovládacie prvky je hodnota rodiča nula a ParentWindow Vlastnosť určuje nadradené okno bez VCL. Nastavenie ParentWindow presunie ovládací prvok tak, aby sa nachádzal v zadanom okne. ParentWindow sa nastaví automaticky, keď sa vytvorí ovládací prvok pomocou CreateParented metóda.

Pravdou je, že vo väčšine prípadov sa nemusíte starať o rodičov a vlastníkov, ale pokiaľ ide o OOP a vývoj komponentov alebo ak chcete posunúť spoločnosť Delphi o krok vpred, vyhlásenia uvedené v tomto článku vám pomôžu podniknúť tento krok rýchlejšie.