Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cierto, no había caido en eso. Pero a ver, lo que haces puede darte problemas por varias razones:

1. Se aconseja el uso de Free en lugar de Destroy;
2. No se aconseja destruir un formulario desde alguno de sus eventos y en su lugar debe usarse Action := caFree en el evento OnClose.

Te pongo una forma de hacer lo que deseas. Esta ya la he probado

1. Al formulario hijo déjalo sólo con el Action := caFree en el OnClose.
2. Cuando crees un nuevo formulario hijo, le pides que notifique a su padre cuando fallezca

Código Delphi [-]
with TFormHijo.Create(...) do
begin
  FreeNotification(Self);
end;

3. En el formulario padre redefine el método Notification para recibir tal notificación:

Código Delphi [-]
type
  TFormPadre = class(TForm)
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  end;

implementation

procedure TFormPadre.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;

  { Si el hijo se muere y ya no hay más (MDIChildCount = 0) ... }
  if (AComponent is TFormHijo) and (Operation = opRemove) and (MDIChildCount = 0) then
    ActualizarMenus;
end;

// Saludos

Última edición por roman fecha: 03-10-2006 a las 19:58:14.
Responder Con Cita
  #2  
Antiguo 03-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Sin palabras Roman, me encanta cuando te sacas cosas como esta de la manga. Esta me la guardo ...
Responder Con Cita
  #3  
Antiguo 03-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues te lo agradezco. De hecho, en mi opinión/gusto, esta técnica es la más apropiada para el sempiterno problema de crear un formulario sólo si no existe ya:

Código Delphi [-]
if not Assigned(FormHijo) then
  FormHijo := TFormHijo.Create(...);

FormHijo.Show;

Es el padre quien pone en nil la referencia FormHijo cuando recibe la notificación de defunción.

// Saludos
Responder Con Cita
  #4  
Antiguo 05-10-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Muchísimas gracias.

Como siempre, sencillo y eficaz.

Además, esto me va a ir de maravilla para otros muchos programas futuros (y algún otro presente)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Al cerrar Form no entra en OnClose nowheremanza OOP 2 13-09-2005 14:04:41
Otra de diferencias... (free y destroy) FunBit OOP 3 03-09-2005 02:33:39
Destroy de mala madre... Xianto OOP 9 31-03-2005 20:24:11
Diferencias entre FREE y DESTROY bustio OOP 1 23-06-2004 05:48:35
Manejo Del Free Y El Destroy Robert SQL 4 19-03-2004 15:11:34


La franja horaria es GMT +2. Ahora son las 05:38:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi