Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 02-03-2005
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
  1. La naturaleza de esta pregunta va más allá del concepto de formularios MDI. En general cuando quieres asegurarte de que un objeto se destruye aún ante la eventualidad de una excepción, debes usar finally en lugar de except:

    Código Delphi [-]
    try
      VerDatos := TFVerDatos.Create(Self);
    
      { más código }
    
    finally
      VerDatos.Free;
    end;

    Nota que requieres una variable (VerDatos) que apunte al objeto creado para poder llamar al método Free.

    Si además requieres manejar una excepción puedes anidar los bloques:

    Código Delphi [-]
    try
      VerDatos := TFVerDatos.Create(Self);
    
      try
        { más código }
      except
        { manejo de la exepción }
      end;
    finally
      VerDatos.Free;
    end;
  2. No me queda claro quién crea a quién pero lo que realmente necesitas saber es el mecanismo que utilizan los descendientes de TComponent (como los formularios) para la destrucción de objetos.

    Cuando construyes un descendiente de TComponent le pasas al constructor el "Owner" de la componente. Este "Owner" o dueño de la componente es otro objeto descendiente de TComponent que se encargará de destruir al objeto. Básicamente lo que sucede es que el "Owner" agrega la componente recién creada a una lista interna de componentes (el arreglo Components). Cuando el "Owner" se destruye (por el método que sea), repasa su lista de componentes llamando al destructor de cada una.

    En tú caso, al pasar Self como parámetro (Self se refiere al formulario en sí) éste se convierte en el "Owner" del formulario hijo y por tanto se encarga de destruirlo.

    Sin embargo nota que tú dices "si form1 se cierra con form2 abierto...". Y el verbo cerrar no implica necesariamente que form1 se destruya. Si se destruye entonces sí se libera form2 pero si simplemente se oculta entonces form2 quedará en memoria hasta que form1 sea destruído.

  3. No está clara tu pregunta. form1.MDIChildCount sólo es válido- como es de suponerse -cuando form1 es MDIForm- únicamente los MDIForm pueden tener MDIChild.

  4. En el momento en que un formulario se muestra con ShowModal no puedes acceder a ningún formulario previamente abierto pero desde el que se abre puedes abrir otros formularios que si podrás acceder.

// Saludos
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 08:22:49.


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