Razumevanje lastnika vs. Staršev v aplikacijah Delphi

Vsakič, ko postavite ploščo na obrazec in gumb na njej, vzpostavite "nevidno" povezavo. Obrazec postane lastnik gumba in plošča je nastavljena tako, da je njegova starš.

Vsaka komponenta Delphi ima lastnost Lastnik. Lastnik poskrbi osvobajanje lastniške komponente, ko se osvobodi.

Podobna, vendar različna lastnost Parent kaže komponento, ki vsebuje komponento "nadrejeno".

Starš

Parent se nanaša na komponento, ki jo vsebuje še ena komponenta, na primer TForm, TGroupBox ali TPanel. Če en kontrolni element (nadrejeni) vsebuje druge, je vseboval kontrole so nadzor nad staršem.

Starš določa, kako se komponenta prikazuje. Na primer, lastnosti Levo in zgoraj so vse glede na starševsko.

Lastnost Staršev lahko med izvajanjem dodelite in spremenite.

Vse komponente nimajo nadrejenega. V mnogih oblikah ni starša. Na primer, obrazci, ki se prikažejo neposredno na namizju sistema Windows, imajo starševsko nastavljeno na nič. Sestavni deli HasParent metoda vrne logično vrednost, ki kaže, ali je bila komponenta dodeljena staršu ali ne.

instagram viewer

Lastnost Parent uporabljamo za pridobitev ali nastavitev nadrejenega krmilnika. Na primer, na obrazec postavite dve plošči (Panel1, Panel2) in na prvo ploščo (Panel1) postavite en gumb (Gumb1). To lastnost Buttonovega staršev nastavi na Panel1.

 Button1.Parent: = Panel2; 

Če zgornjo kodo vstavite v dogodek OnClick za drugo ploščo, ko kliknete Panel2, gumb "skoči" iz plošče1 na Panel2: Panel1 ni več staršev gumba.

Ko želite ustvariti TButton med izvajanjem, je pomembno, da si ne pozabimo dodeliti starša - kontrolnika, ki vsebuje gumb. Da je komponenta vidna, jo mora imeti starša, da se lahko prikaže znotraj.

ParentThis in ParentThat

Če v času načrtovanja izberete gumb in pogledate Object Inspector, boste opazili več lastnosti, ki jih poznajo starši. The ParentFont, na primer, kaže, ali je pisava, uporabljena za napis na gumbu, enaka tisti, ki se uporablja za nadrejeni gumb (v prejšnjem primeru: Panel1). Če je ParentFont resnično za vse gumbe na plošči, sprememba lastnosti pisave plošče na Bold povzroči, da vsi napisi gumba na plošči uporabljajo to (krepko) pisavo.

Nadzira lastnost

Vse komponente, ki imajo istega starša, so na voljo kot del Kontrole last tega starša. Na primer, kontrolniki se lahko uporabljajo za iterate nad vse otroke okenskega upravljalnika.

Naslednji del kode lahko uporabite za skrivanje vseh sestavnih delov na panelu1:

za ii: = 0 do Panel1.ControlCount - 1 stori

 Panel1.Controls [ii]. Vidljiv: = false;


Triki zvijače

Okenske kontrole imajo tri osnovne značilnosti: lahko prejmejo vhodno ostrino, uporabljajo sistemske vire in so lahko starši drugih kontrolnikov.

Na primer, komponenta Gumb je okensko krmiljenje in ne more biti nadrejena za drugo komponento - nanjo ne morete postaviti druge komponente. Stvar je v tem, da Delphi skriva to funkcijo pred nami. Primer je skrita možnost, da ima TStatusBar na sebi nekatere komponente, kot je TProgressBar.

Lastništvo

Najprej upoštevajte, da je obrazec splošni lastnik komponent, ki so na njem (nameščen na obrazcu v času načrtovanja). To pomeni, da ko uniči obrazec, se uničijo tudi vse komponente na obrazcu. Na primer, če imamo aplikacijo z več kot enim obrazcem, ko za objekt obrazca pokličemo metodo Free ali Release, bomo ni treba skrbeti za izrecno sprostitev vseh predmetov na obrazcu - ker je oblika lastnica vseh sestavni deli.

Vsaka komponenta, ki jo ustvarimo v času načrtovanja ali izvajanja, mora biti last druge komponente. Lastnik komponente - vrednost lastnosti Owner - je določen s parametrom, ki ga posreduje ustvarjalcu Create, ko je komponenta ustvarjena. Edini drugi način za dodelitev lastnika je uporaba metod InsertComponent / RemoveComponent med izvajanjem. Obrazec je privzeto lastnik vseh komponent na njem in je v lasti aplikacije.

Ko uporabimo ključno besedo Jaz kot parameter za metodo Create - predmet, ki ga ustvarjamo, je last razreda, v katerem je metoda vsebovana -, ki je ponavadi oblika Delphi.

Če na drugi strani naredimo drugega komponenta (ne oblike) lastnika komponente, potem naredimo to komponento, ki je odgovorna za odstranjevanje predmeta, ko je uničen.

Kot vsaka druga Delphi komponenta, Komponento TFindFile po meri lahko ustvarite, uporabljate in uničujete med izvajanjem. Za ustvarjanje, uporabo in brezplačno a TFindFile komponenta pri zagonu lahko uporabite naslednji delček kode:

uporablja FindFile;

...
var FFile: TFindFile;

postopek TForm1.InitializeData;

začeti // obrazec ("Self") je lastnik komponente // ni staršev, ker je ta // nevidna komponenta.

 FFile: = TFindFile. Ustvari (Self);

 ...

konec;

Opomba: Ker je FFile ustvarjen z lastnikom (Form1), nam ni treba storiti ničesar, da bi osvobodili komponento - ta bo sproščen, ko bo lastnik uničen.

Lastnost komponent

Vse komponente, ki imajo istega lastnika, so na voljo kot del Lastnost komponent tega lastnika. Za brisanje vseh komponent urejanja, ki so na obrazcu, se uporablja naslednji postopek:

postopek ClearEdits (AForm: TForm);

var

 ii: Integer;

začeti

za ii: = 0 do Oblika. ComponentCount-1 stori

če (Oblika. Sestavni deli [ii] je TEdit) torej TEdit (AForm. Sestavni deli [ii]) Besedilo: = '';

konec; 

"Sirote"

Nekateri kontrolniki (na primer ActiveX kontrole) so nameščeni v oknih, ki niso VCL, in ne v nadrejenem nadzoru. Za te kontrole je vrednost Parent nič in ParentWindow lastnost določa nadrejeno okno, ki ni VCL. Če nastavite ParentWindow, premaknete regulator tako, da je vsebovan v določenem oknu. ParentWindow se samodejno nastavi, ko se ustvari nadzor s pomočjo Ustvari nastavljeno metoda.

Resnica je, da v večini primerov ni treba skrbeti za starše in lastnike, ampak ko gre za OOP in razvoj komponent ali če želite Delphi narediti korak naprej, vam bodo izjave v tem članku pomagale narediti korak hitreje.

instagram story viewer