Forståelse af ejer vs. Forælder i Delphi-applikationer

click fraud protection

Hver gang du placerer et panel på en formular og en knap på det panel, opretter du en "usynlig" forbindelse. Formen bliver ejer på knappen, og panelet er indstillet til at være dets forælder.

Hver Delphi-komponent har en ejer-ejendom. Ejeren tager sig af frigørelse de ejede komponenter, når det frigives.

Tilsvarende, men anderledes, egenskaben Forældre angiver den komponent, der indeholder "barn" -komponenten.

Forældre

Forældre refererer til den komponent, som en anden komponent er indeholdt i, såsom TForm, TGroupBox eller en TPanel. Hvis en kontrol (forælder) indeholder andre, vil indeholdt kontroller er børnes kontrol af forælderen.

Forælder bestemmer, hvordan komponenten vises. F.eks. Er egenskaberne Venstre og Top alle i forhold til overordnet.

Overordnede egenskaber kan tildeles og ændres i løbet af kørselstid.

Ikke alle komponenter har moderselskabet. Mange former har ikke et overordnet. For eksempel har formularer, der vises direkte på Windows-skrivebordet, overordnet indstillet til nul. En komponent

instagram viewer
HasParent metoden returnerer en boolesk værdi, der angiver, om komponenten er blevet tildelt en overordnet eller ej.

Vi bruger egenskaben Forældre til at få eller indstille en overordnet til en kontrol. For eksempel skal du placere to paneler (Panel1, Panel2) på en formular og placere en knap (Knap1) på det første panel (Panel1). Dette sætter Buttons overordnede egenskab til Panel1.

 Button1.Parent: = Panel2; 

Hvis du placerer ovenstående kode i OnClick-begivenheden for det andet panel, når du klikker på Panel2, hopper knappen fra panel1 til panel2: Panel1 er ikke længere moderselskabet til knappen.

Når du vil oprette en TButton ved kørsel er det vigtigt, at vi husker at tildele en overordnet - kontrollen, der indeholder knappen. For at en komponent skal være synlig, er det skal have en forælder for at vise sig selv inden for.

ParentThis and ParentThat

Hvis du vælger en knap på designtidspunktet og ser på objektinspektøren, vil du bemærke flere "overordnede" egenskaber. Det ParentFontangiver for eksempel, om den skrifttype, der bruges til Buttons billedtekst, er den samme som den, der blev brugt til Button's overordnede (i det forrige eksempel: Panel1). Hvis ParentFont er sandt for alle knapper på et panel, ændrer panelets skrifttypeegenskab til fed skrift, at al Buttons billedtekst på panelet bruger den (fed) font.

Kontrollerer ejendom

Alle komponenter, der deler det samme overordnede er tilgængelige som en del af Controls det forældres ejendom. For eksempel kan kontroller bruges til iterere over alle børn i vindueskontrollen.

Det næste stykke kode kan bruges til at skjule alle de indeholdte komponenter på Panel1:

til ii: = 0 til Panel1.ControlCount - 1 gøre

 Panel1.Kontroller [ii]. Synlig: = falsk;


Tricking Tricks

Windowed-kontroller har tre grundlæggende egenskaber: De kan modtage inputfokus, de bruger systemressourcer, og de kan være forældre til andre kontroller.

For eksempel er knappen-komponenten en vindue-kontrol og kan ikke være overordnet til en anden komponent - du kan ikke placere en anden komponent på den. Sagen er, at Delphi skjuler denne funktion for os. Et eksempel er den skjulte mulighed for en TStatusBar at have nogle komponenter som TProgressBar på.

Ejendomsret

Bemærk først, at en formular er den overordnede ejer af alle komponenter, der bor på den (placeret på formularen på designtidspunktet). Dette betyder, at når en form ødelægges, ødelægges også alle komponenter på formularen. For eksempel, hvis vi har en applikation med mere end en formular, når vi kalder Free eller Release-metoden for et formularobjekt, vi behøver ikke at bekymre dig om eksplicit at frigøre alle objekter på den formular - fordi formen er ejeren af ​​alle dens komponenter.

Hver komponent, vi opretter, på design eller driftstid, skal ejes af en anden komponent. Ejeren af ​​en komponent - værdien af ​​dens ejendomsejendom - bestemmes af en parameter, der overføres til Opret konstruktøren, når komponenten oprettes. Den eneste anden måde at tildele ejeren på igen er at bruge InsertComponent / RemoveComponent-metoderne under kørselstid. Som standard ejer en formular alle komponenter på den og ejes igen af ​​applikationen.

Når vi bruger nøgleordet Selv som parameter for Opret metoden - det objekt, vi opretter, ejes af den klasse, som metoden er indeholdt i - som normalt er en Delphi-form.

Hvis vi på den anden side laver en anden komponent (ikke formularen) til ejeren af ​​komponenten, så gør vi denne komponent ansvarlig for bortskaffelse af genstanden, når den ødelægges.

Som enhver anden Delphi-komponent, tilpasset TFindFile-komponent kan oprettes, bruges og ødelægges på kørselstidspunktet. For at oprette, bruge og frigøre a TFindFile-komponent ved kørsel kan du bruge det næste kodestykket:

anvendelser FindFile;

...
Var FFile: TFindFile;

procedure TForm1.InitializeData;

begynde // form ("Self") er ejeren af ​​komponenten // der er ikke noget overordnet, da dette // er en usynlig komponent.

 FFile: = TFindFile. Opret (Selv);

 ...

ende;

Bemærk: Da FFile er oprettet med en ejer (Form1), behøver vi ikke at gøre noget for at frigøre komponenten - den frigøres, når ejeren ødelægges.

Komponenter Ejendom

Alle komponenter, der deler den samme ejer, er tilgængelige som en del af Komponenter ejendom af den ejer. Følgende procedure bruges til at rydde alle redigeringskomponenter, der er på formularen:

procedure ClearEdits (AForm: TForm);

Var

 ii: Heltal;

begynde

til ii: = 0 til En form. ComponentCount-1 gøre

hvis (En form. Komponenter [ii] er tRedigér) derefter TEdit (AForm. Komponenter [ii]). Tekst: = '';

ende; 

"Orphans"

Nogle kontroller (såsom ActiveX-kontroller) findes i ikke-VCL-vinduer i stedet for i en overordnet kontrol. For disse kontroller er værdien af ​​forældre nul og ParentWindow egenskab specificerer ikke-VCL overordnet vindue. Indstilling af ParentWindow flytter kontrollen, så den findes i det specificerede vindue. ParentWindow indstilles automatisk, når der oprettes en kontrol vha CreateParented metode.

Sandheden er, at du i de fleste tilfælde ikke behøver at være interesseret i forældre og ejere, men når det kommer til OOP og komponentudvikling eller når du vil tage Delphi et skridt fremad, vil udsagnene i denne artikel hjælpe dig med at tage det skridt hurtigere.

instagram story viewer