TForm.Create (AOwner)

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.

  • nul geeft aan dat geen enkel object het formulier bezit en dat de ontwikkelaar verantwoordelijk is voor het vrijgeven van het gemaakte formulier (door myForm.Free te bellen wanneer u het formulier niet langer nodig hebt)
  • Zelf specificeert het object waarin de methode wordt aangeroepen. Als u bijvoorbeeld een nieuw exemplaar van een TMyForm-formulier maakt vanuit de OnClick-handler van een knop (waar deze knop op een MainForm wordt geplaatst), zelf verwijst naar "MainForm". Dus wanneer de MainForm wordt vrijgegeven, zal deze ook MyForm bevrijden.
  • Toepassing geeft een globale variabele van het type TApplication aan die wordt gemaakt wanneer u uw toepassing uitvoert. "Toepassing" omvat uw toepassing en biedt vele functies die op de achtergrond van het programma voorkomen.

Voorbeelden:

  1. Modale vormen. Wanneer u een formulier maakt om modaal weer te geven en vrij te geven wanneer de gebruiker het formulier sluit, gebruikt u "nul" als eigenaar:
    var myForm: TMyForm; begin myForm: = TMyForm.Create (nul); proberen myForm.ShowModal; uiteindelijk myForm.Free; einde; einde;
  2. Modeless vormen. Gebruik "Toepassing" als eigenaar:
    var
    myForm: TMyForm;
    ...
    myForm: = TMyForm.Create (Toepassing);

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