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”.
Exemple:
var myForm: TMyForm; begin myForm: = TMyForm.Create (zero); încercați myForm.ShowModal; în cele din urmă myForm.Free; Sfârșit; Sfârșit;
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