TForm.Create (AOwner)

Când creați obiecte Delphi în mod dinamic care se moștenesc de la TControl, cum ar fi un TForm (reprezentând o formă / fereastră în aplicațiile Delphi), constructorul „Create” se așteaptă la un parametru „Owner”:

constructor Creare (AOwner: TComponent);

Parametrul AOwner este proprietarul obiectului TForm. Proprietarul formularului este responsabil pentru eliberarea formularului - adică, memoria alocată de formular - atunci când este nevoie. Formularul apare în tabloul Componente al proprietarului său și este distrus automat atunci când proprietarul său este distrus. 

Aveți trei opțiuni pentru parametrul AOwner: Zero, de sine, și cerere.

Pentru a înțelege răspunsul, mai întâi trebuie să știți sensul „nilului”, „sinelui” și „aplicației”.

  • Zero specifică faptul că niciun obiect nu deține formularul și, prin urmare, dezvoltatorul este responsabil pentru eliberarea formularului creat (apelând myForm.Free atunci când nu mai aveți nevoie de formular)
  • De sine specifică obiectul în care este apelată metoda. Dacă, de exemplu, creați o nouă instanță a unui formular TMyForm din interiorul unui handler OnClick al unui buton (unde acest buton este plasat pe un MainForm), de sine se referă la „MainForm”. Astfel, atunci când MainForm este eliberat, acesta va elibera și MyForm.
  • cerere specifică o variabilă globală de tip TApplication creată atunci când rulați aplicația. „Aplicația” încapsulează aplicația, precum și furnizează multe funcții care apar în fundalul programului.

Exemple:

  1. Forme modale. Când creați un formular care va fi afișat modal și eliberat atunci când utilizatorul închide formularul, utilizați „nil” ca proprietar:
    var myForm: TMyForm; begin myForm: = TMyForm.Create (zero); încercați myForm.ShowModal; în cele din urmă myForm.Free; Sfârșit; Sfârșit;
  2. Formele de model. Utilizați „Aplicația” ca proprietar:
    var
    myForm: TMyForm;
    ...
    myForm: = TMyForm.Create (aplicație);

Acum, când terminați (ieșiți) aplicația, obiectul „Aplicație” va elibera instanța „myForm”.

De ce și când este recomandat TMyForm.Create (aplicație)? Dacă formularul este un formular modal și va fi distrus, ar trebui să treceți „nul” pentru proprietar.

Puteți trece „cerere”, dar întârzierea cauzată de metoda de notificare trimisă fiecărei componente și forme deținute sau indirect deținute de Aplicație se poate dovedi perturbatoare. Dacă cererea dvs. constă din mai multe formulare cu multe componente (în mii), iar formularul pe care îl creați are multe controale (în sute), întârzierea notificării poate fi semnificativă.

Trecerea „nil” ca proprietar în loc de „aplicație” va face ca formularul să apară mai devreme și nu va afecta codul.

Cu toate acestea, dacă formularul pe care trebuie să-l creezi nu este modal și nu este creat din formularul principal al aplicației, atunci când specifici „auto” ca proprietar, închiderea proprietarului va elibera formularul creat. Folosiți „sinele” atunci când nu doriți ca formularul să-și trăiască creatorul.

Avertizare: Pentru a iniția dinamic o componentă Delphi și a o elibera în mod explicit cândva mai târziu, treceți întotdeauna „nul” ca proprietar. Nerespectarea acestui lucru poate introduce riscuri inutile, precum și probleme de performanță și de întreținere a codului.

În aplicațiile SDI, atunci când un utilizator închide formularul (făcând clic pe butonul [x]), formularul încă există în memorie - se ascunde doar. În aplicațiile MDI, închiderea unui formular copil MDI îl minimizează.
OnClose evenimentul oferă un Acțiune parametru (de tipul TCloseAction) pe care îl puteți utiliza pentru a specifica ce se întâmplă atunci când un utilizator încearcă să închidă formularul. Setarea acestui parametru pe „caFree” va elibera formularul.

Navigator pentru sfaturi Delphi:
"Obțineți HTML-ul complet de la componenta TWebBrowser
„Cum să convertiți pixeli în milimetri