Wanneer u dynamisch Delphi-objecten maakt die van TControl erven, zoals een TForm (die een formulier / venster in Delphi-toepassingen vertegenwoordigt), verwacht de constructor "Maken" een parameter "Eigenaar":
constructor Maken (AOwner: TComponent);
De parameter AOwner is de eigenaar van het TForm-object. De eigenaar van het formulier is verantwoordelijk voor het vrijmaken van het formulier - d.w.z. geheugen toegewezen door het formulier - indien nodig. Het formulier verschijnt in de Components-array van de eigenaar en wordt automatisch vernietigd wanneer de eigenaar wordt vernietigd.
U hebt drie keuzes voor de parameter AOwner: nul, zelf, en toepassing.
Om het antwoord te begrijpen, moet je eerst de betekenis van "nul", "zelf" en "Toepassing" kennen.
Voorbeelden:
var myForm: TMyForm; begin myForm: = TMyForm.Create (nul); proberen myForm.ShowModal; uiteindelijk myForm.Free; einde; einde;
Wanneer u nu de toepassing beëindigt (afsluit), maakt het object "Toepassing" de instantie "myForm" vrij.
Waarom en wanneer wordt TMyForm.Create (Toepassing) NIET aanbevolen? Als het formulier een modale vorm is en wordt vernietigd, moet u "nul" doorgeven voor de eigenaar.
U kunt 'applicatie' doorgeven, maar de vertraging die wordt veroorzaakt door de meldingsmethode die wordt verzonden naar elk onderdeel en formulier dat eigendom is van of indirect eigendom is van de toepassing, kan storend zijn. Als uw toepassing uit veel formulieren met veel componenten (in de duizenden) bestaat en het formulier dat u maakt, veel besturingselementen (in de honderden) heeft, kan de meldingsvertraging aanzienlijk zijn.
Als u 'nul' doorgeeft als de eigenaar in plaats van 'applicatie', wordt het formulier eerder weergegeven en heeft dit anders geen invloed op de code.
Als het formulier dat u moet maken echter niet modaal is en niet is gemaakt op basis van het hoofdformulier van de toepassing, dan maakt het sluiten van de eigenaar het gemaakte formulier vrij wanneer u "self" als eigenaar opgeeft. Gebruik 'zelf' als u niet wilt dat het formulier de maker overleeft.
Waarschuwing: Om een Delphi-component dynamisch te instantiëren en deze ergens later expliciet te bevrijden, geeft u altijd "nul" door als de eigenaar. Als u dit niet doet, kan dit onnodige risico's en prestatie- en codeonderhoudsproblemen veroorzaken.
Wanneer in SDI-toepassingen het formulier wordt gesloten (door op de knop [x] te klikken), bestaat het formulier nog steeds in het geheugen - het wordt alleen verborgen. In MDI-toepassingen minimaliseert het sluiten van een MDI-onderliggende formulier dit alleen.
De OnClose evenement biedt een Actie parameter (van het type TCloseAction) die u kunt gebruiken om op te geven wat er gebeurt wanneer een gebruiker het formulier probeert te sluiten. Als u deze parameter instelt op "caFree", wordt het formulier vrijgegeven.
Delphi tips navigator:
"Haal de volledige HTML van de TWebBrowser component
"Pixels naar millimeters converteren