Omaniku mõistmine vs. Vanem Delphi rakendustes

click fraud protection

Iga kord, kui asetate paneeli vormile ja sellel paneelil asuvale nupule, saate ühenduse "nähtamatu". Vormist saab omanik nuppu ja paneel on seatud omaks vanem.

Igal Delphi komponendil on omanik Omanik. Omanik hoolitseb vabastades omanduses olevad komponendid, kui see vabastatakse.

Sarnane, kuid erinev vara Vanem tähistab komponenti, mis sisaldab komponenti "laps".

Vanem

Vanem viitab komponendile, milles sisaldub mõni muu komponent, näiteks TForm, TGroupBox või TPanel. Kui üks kontroll (vanem) sisaldab teisi, siis sisaldas juhtelemente on vanema kontroll laps.

Vanem määrab, kuidas komponent kuvatakse. Näiteks on vasak ja ülemine omadus kõik vanema suhtes.

Vanema omadust saab tööaja jooksul määrata ja muuta.

Kõigil komponentidel pole vanemat. Paljudel vormidel puudub vanem. Näiteks on otse Windowsi töölaual kuvatavate vormide vanem seatud nulli. Komponent HasParent meetod tagastab tõeväärtuse, mis näitab, kas komponendile on määratud vanem või mitte.

Kontrollvanema hankimiseks või seadmiseks kasutame vara Vanem. Näiteks pange kaks paneeli (Panel1, Panel2) vormile ja asetage üks nupp (Button1) esimesele paneelile (Panel1). See seab nupu Parent vara väärtuseks Panel1.

instagram viewer

 Button1.Parent: = Panel2; 

Kui paigutate ülaltoodud koodi teise paneeli OnClicki sündmusele, siis kui klõpsate nuppu Panel2, siis nupp "hüppab" paneelilt1 paneelile2: paneel1 pole enam nupu vanem.

Kui soovite luua käitusajal TB-nupu, on oluline, et mäletaksime vanema määramist - nuppu, mis sisaldab nuppu. Et komponent oleks nähtav, on see peab olema vanem, et ennast selles kuvada.

ParentThis ja ParentThat

Kui valite nupu disaini ajal ja vaatate Objektiinspektorit, märkate mitmeid vanemliku teadlikkusega atribuute. ParentFontnäiteks näitab, kas nupu pealdiseks kasutatud font on sama, mida nupu algteksti jaoks (eelmises näites: Paneel1). Kui ParentFont vastab tõele kõigi paneeli nuppude puhul, põhjustab paneeli atribuudi Fondi atribuudi Bold muutmine paneeli kõigi nuppude pealdiste kasutamisel seda (rasvases kirjas) fonti.

Kontrollib vara

Kõik komponendid, millel on sama vanem, on saadaval programmi osana Juhtelemendid selle vanema vara. Näiteks juhtnupud võivad olla harjunud korrake kõigi aknas oleva juhtimise laste üle.

Järgmist kooditükki saab kasutada paneeli1 kõigi sisalduvate komponentide peitmiseks:

jaoks ii: = 0 kuni Panel1.ControlCount - 1 teha

 Paneel1.Kontrollid [ii] .Visutatav: = vale;


Trikkide trikkimine

Akendega juhtelementidel on kolm peamist omadust: nad saavad sisendfookuse, nad kasutavad süsteemiressursse ja võivad olla teiste juhtelementide vanemad.

Näiteks nupp Button on aknaga juhtelement ega saa olla mõne teise komponendi vanem - te ei saa sellele muud komponenti panna. Asi on selles, et Delphi peidab selle funktsiooni meie eest. Näiteks võib TStatusBari varjatud võimalus omada mõnda komponenti, näiteks TProgressBar.

Omand

Esiteks pange tähele, et vorm on sellel asuvate komponentide (vormil disaini ajal paigutatud vormi) üldomanik. See tähendab, et kui vorm hävitatakse, hävitatakse ka kõik vormi komponendid. Näiteks kui meil on vormiobjektiks Vaba või Vabastamine, kui meil on rohkem kui üks vorm, siis meie ei pea muretsema kõigi sellel vormil olevate objektide otsese vabastamise pärast - kuna vorm on kõigi selle vormide omanik komponendid.

Iga komponent, mille me loome disaini või käitamise ajal, peab kuuluma teisele komponendile. Komponendi omanik - selle omaniku atribuudi väärtus - määratakse parameetri abil, mis edastatakse komponendi loomisel komponendi loomisel. Ainus teine ​​viis omaniku uuesti määramiseks on meetodite InsertComponent / RemoveComponent kasutamine töö ajal. Vaikimisi kuuluvad vormile kõik selle komponendid ja see omakorda kuulub rakendusele.

Kui me kasutame märksõna Ise meetodi loomise parameetrina - meie loodud objekt kuulub klassile, milles meetod sisaldub - mis tavaliselt on Delphi vorm.

Kui teisest küljest muudame komponendi omanikuks teise komponendi (mitte vormi), siis paneme selle komponendi vastutama eseme hävitamise korral.

Nagu iga teine Delphi komponent, Kohandatud TFindFile'i komponenti saab töö ajal luua, kasutada ja hävitada. Luua, kasutada ja tasuta a TFindFile komponent käitamisel saate kasutada järgmist koodilõiku:

kasutab FindFile;

...
var Fail: TFindFile;

protseduur TForm1.InitializeData;

alustada // vorm ("Self") on komponendi omanik // Ühtegi vanemat pole, kuna see // on nähtamatu komponent.

 Fail: = TFindFile. Loo (ise);

 ...

lõpp;

Märkus. Kuna FFile luuakse koos omanikuga (vorm1), ei pea me komponendi vabastamiseks midagi tegema - see vabastatakse, kui omanik hävitatakse.

Komponentide omadused

Kõik komponendid, millel on sama omanik, on saadaval programmi osana Komponentide vara selle omaniku. Kõigi vormil olevate redigeerimise komponentide tühjendamiseks kasutatakse järgmist protseduuri:

protseduur ClearEdits (AForm: TForm);

var

 ii: täisarv;

alustada

jaoks ii: = 0 kuni Vorm. ComponentCount-1 teha

kui (Vorm. Komponendid [ii] on TEdit) siis TEdit (AForm. Komponendid [ii]) .tekst: = '';

lõpp; 

"Orvud"

Mõned juhtelemendid (näiteks ActiveX-juhtelemendid) asuvad mitte VCL-i akendes, mitte põhikontrollis. Nende juhtelementide jaoks on vanema väärtus null ja ParentWindow atribuut määrab mitte-VCL-i vanemakna. ParentWindow seadistamine liigutab juhtnuppu nii, et see sisalduks määratud aknas. ParentWindow seadistatakse automaatselt, kui juhtimisseadme abil luuakse LooParented meetod.

Tõde on see, et enamikul juhtudel ei pea te hoolima vanematest ja omanikest, vaid kui tegemist on OOP ja komponentide arendamine või kui soovite Delphi astuda, aitab see artikkel selles avalduses edasi astuda kiiremini.

instagram story viewer