Înțelegerea proprietarului față de părinte în aplicațiile Delphi

De fiecare dată când plasați un panou pe un formular și un buton pe acel panou, faceți o conexiune „invizibilă”. Forma devine proprietar din buton, iar panoul este setat să fie al său mamă.

Fiecare componentă Delphi are o proprietate Owner. Proprietarul are grijă să elibereze componentele deținute atunci când este eliberat.

Similar, dar diferit, proprietatea Părinte indică componenta care conține componenta "copil".

Mamă

Părintele se referă la componenta în care este conținută o altă componentă, cum ar fi TForm, TGroupBox sau un TPanel. Dacă un control (părinte) conține altele, controalele conținute sunt controale ale copilului părintelui.

Părintele stabilește modul în care este afișată componenta. De exemplu, proprietățile Stânga și Sus sunt toate în raport cu părintele.

Proprietatea părintească poate fi atribuită și modificată în timpul rulării.

Nu toate componentele au părintele. Multe forme nu au un Părinte. De exemplu, formularele care apar direct pe desktopul Windows au Parent setat pe nul. A unei componente HasParent metoda returnează o valoare booleană care indică dacă componenta a fost atribuită sau nu părinte.

Folosim proprietatea Părinte pentru a obține sau seta părintele unui control. De exemplu, așezați două panouri (Panel1, Panel2) pe o formă și așezați un buton (Button1) pe primul panou (Panel1). Aceasta setează proprietatea Butonului părinte pe Panel1.

 Button1.Parent: = Panel2; 

Dacă introduceți codul de mai sus în evenimentul OnClick pentru cel de-al doilea panou, atunci când faceți clic pe Panel2, butonul „sare” de la Panel1 la Panel2: Panel1 nu mai este părintele pentru buton.

Când doriți să creați un TButton în timpul rulării, este important să ne amintim să atribuim un părinte - controlul care conține butonul. Pentru ca o componentă să fie vizibilă, aceasta trebuie să aibă un părinte care să se afișeze în interior.

ParentThis and ParentThat

Dacă selectați un buton la momentul proiectării și priviți inspectorul de obiecte, veți observa mai multe proprietăți „conștiente de părinți”. ParentFont, de exemplu, indică dacă fontul folosit pentru titlul butonului este același cu cel folosit pentru părintele butonului (în exemplul precedent: panoul1). Dacă ParentFont este adevărat pentru toate butoanele de pe un panou, schimbarea proprietății Font a panoului cu caractere îngroșate determină ca toate titlurile butonului de pe panou să folosească acel font (bold)..

Controlează proprietatea

Toate componentele care au același părinte sunt disponibile ca parte a Controale proprietatea părintelui respectiv. De exemplu, se pot utiliza Controls pentru iterați peste toți copiii controlului ferestre.

Următoarea bucată de cod poate fi folosită pentru a ascunde toate componentele conținute pe Panel1:

 pentru ii: = 0 la Panel1.ControlCount - 1 do

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