Ver Mensaje Individual
  #4  
Antiguo 08-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Esa instrucción crea una instancia de "TForm2" y guarda una referencia en la variable "Form2". Si el formulario estuviera ya creado, la instancia anterior sería sustituida por la nueva. Si el formulario no estuviera creado, se crearía mediante esa instrucción.

Ya digo. Lo normal es no dejar a Delphi que cree los formularios, es decir, quitar los "CreateForm" del archivo de proyecto ".dpr". Luego, cuando necesitas usar un formulario, lo creas, y cuando ya no lo necesitas lo destruyes.

Pero esto último suele hacerse con formularios que vamos a mostrar "modalmente". Y de hecho no tienes que destruir el formulario explícitamente si le asignas un "Parent" (en su constructor) puesto que ya dicho "Parent" se encargará de la destrucción del formulario.

Si por el contrario muestras el formulario mediante su método "Show", es decir, no lo haces "modalmente", el asunto es muy similar, es decir, compruebas que no exista ya una instancia del formulario que vas a mostrar:

Código Delphi [-]
if not Assigned(Form2) then
  Form2 := TForm2.Create(Self);
Form2.Show();

Y puedes usar el evento "OnClose" de "Form2" de este modo:

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
  Action := caFree;
end;

Pero fíjate que existen otros posibles valores para "Action", como "caMinimize y caHide, caNone".

Antes comenté que normalmente se destruyen los formularios cuando ya no se los necesita, sobre todo si se muestran "modalmente". Esto suele hacerse tal que así:

Código Delphi [-]
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(nil);
  try
    Form2.ShowModal();
  finally
    Form2.Free();
  end;
end;

De ese modo creamos el formulario, lo mostramos y lo destruimos acto seguido de que se cierre. Fíjate que esto último (gracias I.M) todavía puede hacerse de una forma "más elegante", usando la magia del "with" de Delphi:

Código Delphi [-]
begin
  with TForm2.Create(nil) do
  try
    ShowModal();
  finally
    Free();
  end;
end;

Pero no sé si entre tanta cháchara al final he conseguido responder a tu inquietud o qué... Lamento el rollo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita