Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2005
pablo pablo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Argentina . Junin
Posts: 78
Poder: 21
pablo Va por buen camino
mas de mdi

dudas
-----

1) teniendo este codigo
try
TFVerDatos.Create(self);
except
???
end;

en ?? quiero indicar que se haga un free si algo falla; no uso
una variable ( var := TFVerDatos.Create(self)) porque quiero q se cree un form
independiente cada vez q ejecuto el codigo... como puedo hacer?

2)a) tengo un form (form1) q es mdichild de un form parent, a su vez este form tien otro mdichild
creado con .create(self) (form2); si form1 se cierra con form2 abierto, form2 se libera o simplemente se cierra?

B) porque al hacer form1.mdichildCount no me cuenta los form2 que tengo abiertos?, tambien observo que no me toma
a form2 como hijo de form1, salvo que ponga form1.fStyle = MDIForm, pero siendo asi, no seria child de el form principal....
como puedo hacer?

3) puedo hacer showmodal de un form pero solamente para que no le devuelva el control a su padre;
pero sí poder usar otros forms ?
__________________
Pablo Tello
Responder Con Cita
  #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
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


La franja horaria es GMT +2. Ahora son las 20:58:25.


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