Izpratne par īpašnieku vs. Vecāks Delphi lietojumprogrammās

Katru reizi, ievietojot veidlapu paneli un pogu uz tā, izveidojat “neredzamu” savienojumu. Forma kļūst par īpašnieks no pogas, un panelis ir iestatīts tā vecāks.

Katram Delphi komponentam ir īpašnieka īpašums. Īpašnieks rūpējas atbrīvojot īpašumā esošās sastāvdaļas, kad tā tiek atbrīvota.

Līdzīgs, bet atšķirīgs vecāku rekvizīts norāda komponentu, kas satur komponentu “bērns”.

Vecāks

Vecāks attiecas uz komponentu, kurā ietilpst cits komponents, piemēram, TForm, TGroupBox vai TPanel. Ja viena kontrole (vecāks) satur citas, saturēja vadības ierīces ir vecāku kontrolēta bērni.

Vecāks nosaka, kā komponents tiek parādīts. Piemēram, visi kreisā un augšējā rekvizīti ir saistīti ar vecāku.

Vecāku īpašumu var piešķirt un mainīt izpildes laikā.

Ne visiem komponentiem ir vecāks. Daudzām formām nav vecāku. Piemēram, veidlapām, kas parādās tieši uz Windows darbvirsmas, vecāks ir iestatīts uz nulli. Komponents HasParent metode atgriež Būla vērtību, norādot, vai komponentam ir piešķirts vecāks.

Mēs izmantojam vecāku īpašumu, lai iegūtu vai iestatītu kontroli vecākiem. Piemēram, novietojiet divus paneļus (1. panelis, 2. panelis) uz veidlapas un novietojiet vienu pogu (1. poga) uz pirmā paneļa (1. panelis). Tādējādi Button Parent īpašums tiek iestatīts uz Panel1.

instagram viewer

 Button1.Parent: = Panel2; 

Ja ievietosit iepriekš minēto kodu OnClick pasākumā otrajam panelim, tad, kad noklikšķināt uz 2. paneļa, poga “lec” no 1. paneļa uz 2. paneli: 1. panelis vairs nav pogas vecāks.

Ja vēlaties izveidot TBatton izpildes laikā, ir svarīgi atcerēties piešķirt vecāku - vadīklu, kurā atrodas poga. Lai komponents būtu redzams, tas jābūt vecākiem, lai parādītu sevi.

ParentThis un ParentThat

Ja izvēlaties pogu projektēšanas laikā un skatāties uz objekta inspektoru, pamanīsit vairākus “vecākus apzinīgus” rekvizītus. ParentFont, piemēram, norāda, vai pogas parakstīšanai izmantotais fonts ir tāds pats kā fonta vecākam izmantotais fonts (iepriekšējā piemērā: 1. panelis). Ja ParentFont ir taisnība visām paneļa pogām, mainot paneļa rekvizītu Fonts uz Bold, visi pogas paraksti panelī izmanto šo (treknrakstu) fontu.

Kontrolē īpašumu

Visas sastāvdaļas, kurām ir viens un tas pats vecāks, ir pieejamas kā daļa no Kontroles šī vecāka īpašums. Piemēram, ar vadības pultīm var pierast atkārtojiet visiem bērniem, kam ir logs.

Nākamo koda daļu var izmantot, lai paslēptu visus paneļa1 komponentus:

priekš ii: = 0 uz Panel1.ControlCount - 1 darīt

 Panelis1.Kontrols [ii] .Visible: = false;


Viltīgi triki

Logu vadībām ir trīs pamatīpašības: tās var saņemt ievades fokusu, tās izmanto sistēmas resursus un var būt citu vadības elementu vecākas.

Piemēram, komponents Button ir logs, un tas nevar būt vecāks kādam citam komponentam - citu komponentu tajā nevar ievietot. Lieta ir tāda, ka Delfi slēpj šo funkciju no mums. Piemērs ir slēptā iespēja, ka TStatusBar var atrast dažus komponentus, piemēram, TProgressBar.

Īpašumtiesības

Pirmkārt, ņemiet vērā, ka veidlapa ir visu tajā esošo sastāvdaļu (kas veidlapā novietota projektēšanas laikā) kopējais īpašnieks. Tas nozīmē, ka, iznīcinot veidlapu, tiek iznīcināti arī visi veidlapas komponenti. Piemēram, ja mums ir lietojumprogramma ar vairāk nekā vienu formu, kad veidlapas objektam saucam metodi Free vai Release, mēs nav jāuztraucas par visu šīs formas objektu tiešu atbrīvošanu, jo forma ir visu tās īpašnieku sastāvdaļas.

Katram komponentam, ko mēs izveidojam projektēšanas vai izpildes laikā, jābūt cita komponenta īpašumā. Komponenta īpašnieku - tā īpašnieka īpašuma vērtību - nosaka ar parametru, kas tiek nodots konstruktora izveidei, kad komponents tiek izveidots. Vienīgais veids, kā atkārtoti piešķirt īpašniekam, ir izmantot metodes InsertComponent / RemoveComponent izpildes laikā. Pēc noklusējuma veidlapai pieder visi tajā esošie komponenti, un tā savukārt pieder lietojumprogrammai.

Kad mēs izmantojam atslēgvārdu Es pats kā parametra izveides metodei - objekts, kuru mēs izveidojam, pieder klasei, kurā metode ir ietverta - kas parasti ir Delphi forma.

Ja, no otras puses, mēs citu komponentu (nevis formu) padarām par komponenta īpašnieku, tad mēs uzliekam šo sastāvdaļu atbildīgai par objekta iznīcināšanu, kad tas tiek iznīcināts.

Tāpat kā jebkurš cits Delphi komponents, Pēc pasūtījuma izgatavotu TFindFile komponentu var izveidot, izmantot un iznīcināt izpildes laikā. Lai izveidotu, izmantotu un atbrīvotu a TFindFile komponents palaišanas laikā varat izmantot nākamo koda fragmentu:

izmanto FindFile;

...
var File: TFindFile;

procedūra TForm1.InitializeData;

sākt // forma ("Self") ir komponenta īpašnieks // Vecāku nav, jo šis // ir neredzams komponents.

 Fails: = TFindFile. Izveidot (sevi);

 ...

beigas;

Piezīme. Tā kā FFile tiek izveidots kopā ar īpašnieku (1. veidlapa), mums komponenta atbrīvošanai nekas nav jādara - tas tiks atbrīvots, kad īpašnieks tiks iznīcināts.

Komponenti Īpašums

Visas sastāvdaļas, kurām ir viens īpašnieks, ir pieejamas kā daļa no Komponentu īpašums šī īpašnieka. Lai notīrītu visus veidlapas rediģēšanas komponentus, tiek izmantota šāda procedūra:

procedūra ClearEdits (AForm: TForm);

var

 ii: vesels skaitlis;

sākt

priekš ii: = 0 uz Forma. ComponentCount-1 darīt

ja (Forma. Sastāvdaļas [ii] ir TEdit) tad TEdit (AForm. Sastāvdaļas [ii]). Teksts: = '';

beigas; 

"Bāreņi"

Dažas vadīklas (piemēram, ActiveX vadīklas) ir ietvertas logos, kas nav VCL, nevis vecākvadībā. Šīm kontrolēm vecāku vērtība ir nulle un Vecāku logs rekvizīts norāda vecāku logu, kas nav VCL. Iestatot ParentWindow, vadības ierīce tiek pārvietota tā, lai tā būtu norādītajā logā. ParentWindow tiek iestatīts automātiski, kad vadīklu izveido, izmantojot IzveidotParented metode.

Patiesība ir tāda, ka vairumā gadījumu jums nav jārūpējas par vecākiem un īpašniekiem, bet gan par OOP un komponentu izstrāde vai arī, ja vēlaties spert Delphi par vienu soli uz priekšu, šajā rakstā minētie apgalvojumi palīdzēs jums to izdarīt ātrāk.