Cuando crea dinámicamente objetos Delphi que heredan de TControl, como un TForm (que representa un formulario / ventana en aplicaciones Delphi), el constructor "Crear" espera un parámetro "Propietario":
constructor Create (AOwner: TComponent);
El parámetro AOwner es el propietario del objeto TForm. El propietario del formulario es responsable de liberar el formulario, es decir, la memoria asignada por el formulario, cuando sea necesario. El formulario aparece en la matriz Componentes de su propietario y se destruye automáticamente cuando se destruye su propietario..
Tiene tres opciones para el parámetro AOwner: Nulo, yo, y solicitud.
Para comprender la respuesta, primero debe conocer el significado de "nulo", "propio" y "Aplicación".
Ejemplos:
var myForm: TMyForm; comenzar myForm: = TMyForm.Create (nulo); pruebe myForm.ShowModal; finalmente myForm.Free; final; final;
Ahora, cuando finaliza (sale) de la aplicación, el objeto "Aplicación" liberará la instancia "myForm".
¿Por qué y cuándo NO se recomienda TMyForm.Create (Aplicación)? Si el formulario es modal y se destruirá, debe pasar "nulo" para el propietario.
Puede pasar "solicitud", pero el retraso de tiempo causado por el método de notificación que se envía a cada componente y formulario de propiedad o propiedad indirecta de la Aplicación podría resultar perjudicial. Si su aplicación consta de muchos formularios con muchos componentes (en miles), y el formulario que está creando tiene muchos controles (en cientos), el retraso de la notificación puede ser significativo.
Si pasa "nulo" como propietario en lugar de "solicitud", el formulario aparecerá antes y no afectará el código.
Sin embargo, si el formulario que necesita crear no es modal y no se crea desde el formulario principal de la aplicación, cuando especifique "self" como propietario, al cerrar el propietario se liberará el formulario creado. Use "self" cuando no quiera que el formulario sobreviva a su creador.
Advertencia: Para crear una instancia dinámica de un componente Delphi y liberarlo explícitamente en algún momento posterior, siempre pase "nulo" como propietario. De lo contrario, puede introducir riesgos innecesarios, así como problemas de rendimiento y mantenimiento del código..
En las aplicaciones SDI, cuando un usuario cierra el formulario (haciendo clic en el botón [x]), el formulario todavía existe en la memoria, solo se oculta. En aplicaciones MDI, cerrar un formulario secundario MDI solo lo minimiza.
los OnClose evento proporciona un Acción parámetro (del tipo TCloseAction) que puede usar para especificar qué sucede cuando un usuario intenta cerrar el formulario. Establecer este parámetro en "caFree" liberará el formulario.
Navegador de consejos de Delphi:
"Obtenga el HTML completo del componente TWebBrowser
"Cómo convertir píxeles a milímetros