Beoordelingen

Inzicht in eigenaar versus ouder in Delphi-toepassingen

Inzicht in eigenaar versus ouder in Delphi-toepassingen



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Telkens wanneer u een paneel op een formulier en een knop op dat paneel plaatst, maakt u een "onzichtbare" verbinding. De vorm wordt de eigenaar van de knop en het paneel is ingesteld als zijn ouder.

Elk Delphi-onderdeel heeft de eigenschap Eigenaar. De Eigenaar zorgt voor het bevrijden van de eigen componenten wanneer deze worden vrijgegeven.

Op dezelfde manier, maar anders, geeft de eigenschap Parent de component aan die de component 'child' bevat.

Ouder

Ouder verwijst naar de component waarin zich een andere component bevindt, zoals TForm, TGroupBox of een TPanel. Als één besturingselement (ouder) andere bevat, zijn de opgenomen besturingselementen onderliggende besturingselementen van de ouder.

Ouder bepaalt hoe de component wordt weergegeven. De eigenschappen Left en Top zijn bijvoorbeeld allemaal relatief ten opzichte van de ouder.

De eigenschap Parent kan tijdens de uitvoering worden toegewezen en gewijzigd.

Niet alle componenten hebben de ouder. Veel formulieren hebben geen ouder. Voor formulieren die rechtstreeks op het Windows-bureaublad verschijnen, is Ouder bijvoorbeeld ingesteld op nul. Een component HasParent methode retourneert een booleaanse waarde die aangeeft of aan het onderdeel een ouder is toegewezen.

We gebruiken de eigenschap Parent om de ouder van een besturingselement op te halen of in te stellen. Plaats bijvoorbeeld twee panelen (Panel1, Panel2) op een formulier en plaats een knop (Button1) op het eerste paneel (Panel1). Hiermee wordt de eigenschap Parent van Button ingesteld op Panel1.

Button1.Parent: = Panel2;

Als u de bovenstaande code in de OnClick-gebeurtenis voor het tweede paneel plaatst, en u op Panel2 klikt, "springt" de knop van Panel1 naar Panel2: Panel1 is niet langer de ouder voor de knop.

Wanneer u tijdens de uitvoering een TButton wilt maken, is het belangrijk dat we niet vergeten een ouder toe te wijzen - het besturingselement dat de knop bevat. Voor een component zichtbaar te zijn, het moet een ouder hebben om zichzelf binnen te laten zien.

ParentThis en ParentThat

Als u tijdens het ontwerp een knop selecteert en naar de Object Inspector kijkt, ziet u verschillende "ouderbewuste" eigenschappen. De ParentFontgeeft bijvoorbeeld aan of het lettertype dat wordt gebruikt voor het bijschrift van de knop hetzelfde is als het lettertype dat wordt gebruikt voor het bovenliggende element van de knop (in het vorige voorbeeld: deelvenster 1). Als ParentFont waar is voor alle knoppen op een paneel, zorgt het wijzigen van de eigenschap Lettertype van het paneel ervoor dat alle bijschriften op het paneel dat (vetgedrukte) lettertype gebruiken.

Beheert eigendom

Alle componenten die dezelfde ouder delen, zijn beschikbaar als onderdeel van de controls eigendom van die ouder. Besturingselementen kunnen bijvoorbeeld worden gebruikt itereer over alle kinderen van de raambediening.

Het volgende stuk code kan worden gebruikt om alle componenten op Panel1 te verbergen:

voor ii: = 0 naar Panel1.ControlCount - 1 do

Panel1.Controlsii.Visible: = false;

Trucs bedriegen

Besturingselementen met vensters hebben drie basiskenmerken: ze kunnen de invoerfocus ontvangen, ze gebruiken systeembronnen en ze kunnen ouders zijn van andere besturingselementen.

Het component Button is bijvoorbeeld een besturingselement met venster en kan niet het bovenliggende element zijn van een ander component - u kunt er geen ander component op plaatsen. Het ding is dat Delphi deze functie voor ons verbergt. Een voorbeeld is de verborgen mogelijkheid voor een TStatusBar om sommige componenten zoals TProgressBar erop te hebben.

Eigendom

Merk eerst op dat een formulier de algemene eigenaar is van alle componenten die zich erop bevinden (tijdens het ontwerp op het formulier geplaatst). Dit betekent dat wanneer een formulier wordt vernietigd, alle componenten op het formulier ook worden vernietigd. Als we bijvoorbeeld een toepassing hebben met meer dan één formulier wanneer we de methode Free of Release voor een formulierobject aanroepen, hoeven we ons geen zorgen te maken over het expliciet bevrijden van alle objecten op dat formulier, omdat het formulier de eigenaar is van alle componenten.

Elk onderdeel dat we maken, tijdens het ontwerp of tijdens de uitvoering, moet eigendom zijn van een ander onderdeel. De eigenaar van een component - de waarde van de eigenschap Owner - wordt bepaald door een parameter die wordt doorgegeven aan de constructor Create wanneer de component wordt gemaakt. De enige andere manier om de eigenaar opnieuw toe te wijzen, is tijdens het uitvoeren van de methode InsertComponent / RemoveComponent. Standaard bezit een formulier alle componenten en is op zijn beurt eigendom van de toepassing.

Wanneer we het sleutelwoord Self gebruiken als parameter voor de Create-methode, is het object dat we maken eigendom van de klasse waarin de methode is opgenomen - meestal een Delphi-vorm.

Als we daarentegen een ander onderdeel (niet het formulier) de eigenaar van het onderdeel maken, dan maken we dat onderdeel verantwoordelijk voor het weggooien van het object wanneer het wordt vernietigd.

Zoals elke andere Delphi-component, kan op maat gemaakte TFindFile-component worden gemaakt, gebruikt en vernietigd tijdens runtime. Om een ​​TFindFile-component te maken, te gebruiken en vrij te geven tijdens het uitvoeren, kunt u het volgende codefragment gebruiken:

toepassingen Vind bestand;

var FFile: TFindFile;

procedure TForm1.InitializeData;

beginnen // form ("Self") is de eigenaar van de component // er is geen ouder omdat deze // een onzichtbare component is.

FFile: = TFindFile.Create (Self);

 …

einde;

Opmerking: Aangezien de FFile is gemaakt met een eigenaar (Form1), hoeven we niets te doen om de component te bevrijden - deze wordt vrijgegeven wanneer de eigenaar wordt vernietigd.

Componenten Eigenschap

Alle componenten die dezelfde eigenaar delen, zijn beschikbaar als onderdeel van de Componenten eigendom van die eigenaar. De volgende procedure wordt gebruikt om alle bewerkingsonderdelen op het formulier te wissen:

procedure ClearEdits (AForm: TForm);

var

ii: Geheel getal;

beginnen

  voor ii: = 0 naar AForm.ComponentCount-1 do

  als (AForm.Componentsii is TEdit) vervolgens TEdit (AForm.Componentsii) .Tekst: = ";

einde;

"Orphans"

Sommige besturingselementen (zoals ActiveX-besturingselementen) bevinden zich in niet-VCL-vensters in plaats van in een bovenliggend besturingselement. Voor deze besturingselementen is de waarde van Ouder nul en de ParentWindow eigenschap geeft het niet-VCL bovenliggende venster aan. Als u ParentWindow instelt, wordt het besturingselement verplaatst naar het opgegeven venster. ParentWindow wordt automatisch ingesteld wanneer een besturingselement wordt gemaakt met de CreateParented methode.

De waarheid is dat je in de meeste gevallen niet om ouders en eigenaren hoeft te geven, maar als het gaat om OOP en componentontwikkeling of wanneer je Delphi een stap vooruit wilt zetten, helpen de uitspraken in dit artikel je om die stap sneller te zetten .


Bekijk de video: Dr Deans presentation: Transcendental Meditation in Education (Augustus 2022).