Když vytvoříte Objekty Delphi dynamicky který zdědí od TControl, jako je TForm (představující formulář / okno v aplikacích Delphi), konstruktor „Create“ očekává parametr „Owner“:
konstruktor Create (AOwner: TComponent);
Parametr AOwner je vlastníkem objektu TForm. Vlastník formuláře odpovídá za uvolnění formuláře - tj. Paměti přidělené formulářem - v případě potřeby. Formulář se objeví v poli Komponenty jeho vlastníka a je zničen automaticky, když je jeho vlastník zničen.
Pro parametr AOwner máte tři možnosti: Nula, já, a aplikace.
Abychom pochopili odpověď, musíte nejprve znát význam „nula“, „já“ a „aplikace“.
- Nula Určuje, že žádný objekt nevlastní formulář, a proto je vývojář zodpovědný za uvolnění vytvořeného formuláře (voláním myForm. Zdarma, když již formulář nepotřebujete)
- Já Určuje objekt, ve kterém je metoda volána. Pokud například vytváříte novou instanci formuláře TMyForm z manipulátoru OnClick tlačítka (kde je toto tlačítko umístěno na MainForm), já odkazuje na "MainForm." Když je MainForm uvolněn, uvolní také MyForm.
- aplikace Určuje globální proměnnou typu TApplication vytvořenou při spuštění aplikace. „Aplikace“ zahrnuje vaši aplikaci a poskytuje mnoho funkcí, které se vyskytují na pozadí programu.
Příklady:
- Modální formy. Při vytváření formuláře, který se má modálně zobrazit a uvolnit, když uživatel formulář uzavře, použijte jako vlastníka „nil“:
var myForm: TMyForm; začněte myForm: = TMyForm. Vytvořit(nula); zkuste myForm. ShowModal; konečně myForm. Volný, uvolnit; konec; konec;
- Modeless formy. Jako vlastník použijte „Aplikace“:
var
myForm: TMyForm;
...
myForm: = TMyForm. Vytvořit (Aplikace);
Nyní, když ukončíte (ukončíte) aplikaci, uvolní objekt „Application“ instanci „myForm“.
Proč a kdy je TMyForm. Vytvořit (aplikace) NENÍ doporučeno? Pokud je formulář modální formulář a bude zničen, měli byste předat majiteli „nulové“.
Mohli byste předat „aplikaci“, ale časové zpoždění způsobené zasláním metody oznámení do každé komponenty a formuláře, které vlastní nebo nepřímo vlastní aplikace, by se mohlo ukázat jako rušivé. Pokud vaše aplikace sestává z mnoha formulářů s mnoha komponenty (v tisících) a formulář, který vytváříte, má mnoho ovládacích prvků (ve stovkách), může být zpoždění oznámení značné.
Pokud předáte „nil“ jako vlastník namísto „aplikace“, způsobí to, že se formulář objeví dříve, a jinak to neovlivní kód.
Pokud však formulář, který potřebujete vytvořit, není modální a není vytvořen z hlavního formuláře aplikace, pak když jako vlastníka zadáte „self“, uzavření vlastníka vytvoří vytvořený formulář. Pokud nechcete, aby formulář přežil svého tvůrce, použijte „já“.
Varování: Chcete-li dynamicky vytvořit instanci komponenty Delphi a explicitně ji uvolnit někdy později, vždy předejte jako majitel "nil". Pokud tak neučiníte, může to představovat zbytečné riziko a problémy s výkonem a údržbou kódu.
v SDI aplikace, když uživatel zavře formulář (kliknutím na tlačítko [x]) formulář stále existuje v paměti - pouze se skryje. V aplikacích MDI je uzavření podřízeného formuláře MDI pouze minimalizováno.
OnClose událost poskytuje Akce parametr (typu TCloseAction) můžete použít k určení toho, co se stane, když se uživatel pokusí formulář zavřít. Nastavení tohoto parametru na „caFree“ uvolní formulář.
Navigátor tipů pro Delphi:
»Získejte úplný HTML z komponenty TWebBrowser
«Jak převést pixely na milimetry