Förstå ägare kontra förälder i Delphi-applikationer

Varje gång du placerar en panel på ett formulär och en knapp på den panelen skapar du en "osynlig" anslutning. Formen blir ägare på knappen, och panelen är inställd på att vara dess förälder.

Varje Delphi-komponent har en ägareegenskap. Ägaren tar hand om att frigöra de ägda komponenterna när de frigörs.

Liknande, men annorlunda, föräldraregenskapen indikerar komponenten som innehåller "barn" -komponenten.

Förälder

Förälder hänvisar till den komponent som en annan komponent finns i, till exempel TForm, TGroupBox eller en TPanel. Om en kontroll (förälder) innehåller andra, är de medföljande kontrollerna barnkontroller av föräldern.

Förälder bestämmer hur komponenten ska visas. Till exempel är vänster- och toppegenskapen alla relativt föräldrarna.

Föräldraregenskapen kan tilldelas och ändras under körning.

Inte alla komponenter har överordnade. Många former har inte förälder. Till exempel har formulär som visas direkt på Windows-skrivbordet förälder inställt på noll. En komponent HasParent metoden returnerar ett booleskt värde som indikerar om komponenten har tilldelats en överordnad eller inte.

Vi använder föräldraregenskapen för att få eller ställa in överordnade till en kontroll. Lägg till exempel två paneler (Panel1, Panel2) på ett formulär och placera en knapp (Knapp1) på den första panelen (Panel1). Detta sätter Buttons överordnade egenskap till Panel1.

 Knapp1.Parent: = Panel2; 

Om du placerar ovanstående kod i OnClick-händelsen för den andra panelen, när du klickar på Panel2, "hoppar" knappen från Panel1 till Panel2: Panel1 är inte längre föräldrar för knappen.

När du vill skapa en TButton vid körning är det viktigt att vi kommer ihåg att tilldela en förälder - kontrollen som innehåller knappen. För att en komponent ska vara synlig är det måste ha en förälder för att visa sig själv inom.

ParentThis och ParentThat

Om du väljer en knapp vid designtid och tittar på objektinspektören kommer du att märka flera "föräldersmedvetna" egenskaper. De ParentFont, indikerar till exempel om det teckensnitt som används för knappens rubrik är detsamma som det som används för knappens överordnade (i föregående exempel: Panel1). Om ParentFont är sant för alla knappar på en panel, ändrar panelens teckensnittegenskap till fet skrift att alla knappens bildtexter på panelen använder det (fetstil) teckensnittet.

Kontrollerar egendom

Alla komponenter som har samma förälder är tillgängliga som en del av kontroller förälderns egendom. Till exempel kan kontroller användas till iterera över alla fönsterkontrollens barn.

Nästa kodkod kan användas för att dölja alla innehållna komponenter på Panel1:

 för ii: = 0 till Panel1.ControlCount - 1 do

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