Omistajan ymmärtäminen vs. Vanhempi Delphi-sovelluksissa

Joka kerta, kun asetat paneelin lomakkeelle ja painikkeen siihen, muodostat "näkymättömän" yhteyden. Lomakkeesta tulee omistaja -painikkeesta, ja paneeli on asetettu sen vanhempi.

Jokaisella Delphi-komponentilla on omistaja-ominaisuus. Omistaja huolehtii vapauttaminen omistamat komponentit, kun se vapautetaan.

Samanlainen, mutta erilainen Emo-ominaisuus ilmaisee komponentin, joka sisältää "lapsi" -komponentin.

vanhempi

Emoyhtiö viittaa komponenttiin, johon toinen komponentti sisältyy, kuten TForm, TGroupBox tai TPanel. Jos yksi ohjausobjekti (vanhempi) sisältää muita, sisälsi ohjaimia ovat vanhemman lapsiohjauksia.

Vanhempi määrittelee kuinka komponentti näytetään. Esimerkiksi Vasen ja Ylä-ominaisuudet ovat kaikki suhteessa vanhempiin.

Emoyhtiö-ominaisuus voidaan määrittää ja muuttaa ajon aikana.

Kaikilla komponenteilla ei ole ylätasoa. Monilla muodoilla ei ole vanhempaa. Esimerkiksi lomakkeissa, jotka ilmestyvät suoraan Windowsin työpöydälle, Vanhempi on asetettu nollaksi. Komponentti HasParent

instagram viewer
menetelmä palauttaa boolen arvon, joka osoittaa, onko komponentti määritetty vanhemmalle vai ei.

Käytämme Parent-ominaisuutta saadaksemme tai asettamalla vanhemman hallintaan. Aseta esimerkiksi kaksi paneelia (Panel1, Panel2) lomakkeelle ja aseta yksi painike (Button1) ensimmäiseen paneeliin (Panel1). Tämä asettaa Button's Parent -ominaisuuden arvoksi Panel1.

 Button1.Parent: = Panel2; 

Jos sijoitat yllä olevan koodin toisen paneelin OnClick-tapahtumaan, napsauttaessasi Paneeli2 -painike "hyppää" Paneelista1 paneeliin2: Paneeli1 ei ole enää painikkeen vanhempi.

Kun haluat luoda TB-painikkeen ajon aikana, on tärkeää, että muistamme määrittää vanhemman - painikkeen sisältävän säätimen. Jotta komponentti olisi näkyvissä, se täytyy olla vanhempi voidakseen näyttää itsensä.

ParentThis ja ParentThat

Jos valitset painikkeen suunnittelun aikana ja katsot objektin tarkastajaa, huomaat useita "Vanhemmat tietoisia" ominaisuuksia. ParentFontosoittaa esimerkiksi, onko Painikkeen kuvatekstissä käytetty fontti sama kuin Painikkeen vanhemmalle (edellisessä esimerkissä: Paneeli1). Jos ParentFont on totta kaikissa paneelin painikkeissa, paneelin Font-ominaisuuden muuttaminen lihavoituksi saa kaikki paneelin painikkeet käyttämään tätä (lihavoitua) kirjasinta.

Hallitsee omaisuutta

Kaikki komponentit, joilla on sama vanhempi, ovat saatavana osana ohjaimet kyseisen vanhemman omaisuus. Esimerkiksi säätimiä voidaan käyttää toista kaikki ikkunaisen ohjauksen lapset.

Seuraavaa koodipalaa voidaan käyttää piilottamaan kaikki paneelin1 sisältämät komponentit:

varten ii: = 0 että Panel1.ControlCount - 1 tehdä

 Paneeli1.hallinta [ii] .Vissble: = false;


Huijaavia temppuja

Ikkunallisilla säätimillä on kolme perusominaisuutta: ne voivat vastaanottaa syöttötarkennuksen, käyttävät järjestelmäresursseja ja voivat olla vanhempia muille ohjaimille.

Esimerkiksi Button-komponentti on ikkuna-ohjaus eikä voi olla vanhempi jollekin muulle komponentille - et voi asettaa toista komponenttia siihen. Asia on se, että Delphi piilottaa tämän ominaisuuden meiltä. Esimerkki on TStatusBarin piilotettu mahdollisuus käyttää joitain komponentteja, kuten TProgressBar.

omistaminen

Ensinnäkin, huomaa, että lomake on siinä olevien komponenttien (sijoitettu lomakkeelle suunnitteluaikana) yleinen omistaja. Tämä tarkoittaa, että kun lomake tuhoutuu, myös kaikki lomakkeen komponentit tuhoutuvat. Esimerkiksi, jos meillä on sovellus, jossa on enemmän kuin yksi muoto, kun kutsumme lomakeobjektiksi Free- tai Release-menetelmää, me ei tarvitse huolehtia kaikkien lomakkeessa olevien esineiden vapauttamisesta nimenomaisesti - koska lomake on kaiken sen omistaja komponentteja.

Jokaisen komponentin, jonka luomme suunnittelun tai ajon aikana, on oltava toisen komponentin omistuksessa. Komponentin omistaja - sen omistajaominaisuuden arvo - määritetään parametrilla, joka välitetään Luo rakentajalle, kun komponentti luodaan. Ainoa toinen tapa määrittää omistaja uudelleen käyttää InsertComponent / RemoveComponent-menetelmiä ajon aikana. Oletuksena lomake omistaa kaikki sen komponentit, ja se puolestaan ​​on sovelluksen omistama.

Kun käytämme avainsanaa itse parametrina Luo-menetelmälle - luomme objekti on luokan omistuksessa, johon menetelmä sisältyy - joka on yleensä Delphi-muoto.

Jos toisaalta teemme toisen komponentin (ei muodon) komponentin omistajaksi, niin annamme kyseisen komponentin vastuulle esineen hävittämisestä, kun se tuhoutuu.

Kuten mikään muu Delphi-komponentti, Muokattu TFindFile-komponentti voidaan luoda, käyttää ja tuhota ajon aikana. Voit luoda, käyttää ja ilmaiseksi a TFindFile-komponentti ajon aikana voit käyttää seuraavaa koodinpätkää:

käyttötarkoitukset FindFile;

...
var Tiedosto: TFindFile;

menettely TForm1.InitializeData;

alkaa // muoto ("Itse") on komponentin omistaja // vanhempaa ei ole, koska tämä // on näkymätön komponentti.

 Tiedosto: = TFindFile. Luo (itse);

 ...

pää;

Huomaa: Koska FFile luodaan omistajan kanssa (Lomake1), meidän ei tarvitse tehdä mitään komponentin vapauttamiseksi - se vapautetaan, kun omistaja tuhotaan.

Komponentit Omaisuus

Kaikki komponentit, joilla on sama omistaja, ovat saatavana osana Komponentit omaisuus kyseisen omistajan. Seuraavaa menettelyä käytetään tyhjentämään kaikki lomakkeessa olevat Muokkaa komponentteja:

menettely ClearEdits (AForm: TForm);

var

 ii: kokonaisluku;

alkaa

varten ii: = 0 että Lomake. ComponentCount-1 tehdä

jos (Lomake. Komponentit [ii] On tMuokkaa) sitten TEdit (AForm. Komponentit [ii]). Teksti: = '';

pää; 

"Orphans"

Jotkut ohjaimet (kuten ActiveX-ohjaimet) sisältyvät ei-VCL-ikkunoihin, eikä pääkäyttäjään. Näissä säätimissä vanhemman arvo on nolla ja ParentWindow ominaisuus määrittää ei-VCL-pääikkunan. ParentWindow-asetuksen asettaminen siirtää säädintä siten, että se sisältyy määritettyyn ikkunaan. ParentWindow asetetaan automaattisesti, kun ohjaus luodaan CreateParented menetelmä.

Totuus on, että useimmissa tapauksissa sinun ei tarvitse huolehtia vanhemmista ja omistajista, mutta kun kyseessä on OOP ja komponenttien kehittäminen tai kun haluat viedä Delphin askeleen eteenpäin tämän artikkelin lausunnot auttavat sinua ottamaan tämän askeleen nopeammin.

instagram story viewer