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 01-12-2005
coleleon coleleon is offline
Miembro
 
Registrado: nov 2005
Posts: 23
Poder: 0
coleleon Va por buen camino
Cerrar forms de manera independiente

Wenas!!! tengo un proyecto con dos forms, lo q quiero conseguir es q pueda cerrar cada uno de ellos independientemente,es decir,si cierro uon de los 2,el otro siga ejecutándose sin terminar la aplicación.Ahora lo q me pasa es q si cierro uno de ellos finaliza todo.Gracias
Responder Con Cita
  #2  
Antiguo 01-12-2005
jdangosto jdangosto is offline
Miembro
 
Registrado: jun 2004
Posts: 82
Poder: 20
jdangosto Va por buen camino
No se exactamente a que te refieres, pero si cierras uno de ellos y cierras ambos, prueba a poner uno oculto, es decir, visible := false


Quizas te sirva eso.
__________________
Lo que los Ojos ven y los Oidos Oyen la Mente se lo Cree (H.Houdini)
Responder Con Cita
  #3  
Antiguo 01-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Debes estar cerrando el formulario principal por eso se te cierran todos los formularios.
Ocultalo en lugar de cerrarlo.

Código Delphi [-]
  Self.Hide;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 01-12-2005
coleleon coleleon is offline
Miembro
 
Registrado: nov 2005
Posts: 23
Poder: 0
coleleon Va por buen camino
El código Self.Hide,donde lo pongo?en el evento OnClose? para q cuando le de a cerrar no termine?
Responder Con Cita
  #5  
Antiguo 01-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El en botón o menú que utilices para cerrar el lugar de Self.Close utiliza ésto (para el form principal); Luego en algun momento deberás visualizarlo; Para acabar la aplicación puedes utilizar:

Código Delphi [-]
  Application.Terminate;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 01-12-2005
coleleon coleleon is offline
Miembro
 
Registrado: nov 2005
Posts: 23
Poder: 0
coleleon Va por buen camino
Me podría servir, pero cómo puedo hacer eso si cierras desde la ventana misma?
Responder Con Cita
  #7  
Antiguo 01-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
El caso es que delphi toma el primer formulario creado como formulario principal de la aplicación, y al cerrarse este formulario, la aplicación termina.

No hace falta rebuscar tanto... me parece que lo que procede hacer es un tercer formulario, y que sea este el formulario principal (el primero que se crea). Podrías ocultarlo al nomas iniciar la aplicación y cerrarlo por código cuando detectas que los dos formularios han sido cerrados, para que la aplicación termine.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 01-12-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por jachguate
El caso es que delphi toma el primer formulario creado como formulario principal de la aplicación, y al cerrarse este formulario, la aplicación termina.
No estoy de acuerdo en esto.

Resulta que no siempre el 1er formulario que se crea es el principal pues tengo este codigo
Código Delphi [-]
  Application.Initialize;
    with tfrmAcceso.Create(nil) do begin
      if ShowModal=mrok then begin
        frmPantEntr:=TfrmPantEntr.Create(nil);
        Application.CreateForm(Tfrmprincipal, frmprincipal);
        FreeAndNil(frmPantEntr);
        Application.Run;
      end else
      begin
        application.Terminate;
      end;//If
    end;//With
...
...
...
y como bien se ve, el 1ro en crearse es frmacceso y despues los demas. Al validar el acceso, este formulario se cierra y da paso a las demas lineas de codigo

Donde si toma como principal el primer formulario que se crea con Application.......

o me equivoco???:-s
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 01-12-2005 a las 22:32:12.
Responder Con Cita
  #9  
Antiguo 01-12-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
Cita:
Empezado por vtdeleon
o me equivoco???:-s
No te equivocas. Supongo que cuando jachguate dijo:


Cita:
Empezado por jachguate
El caso es que delphi toma el primer formulario creado como formulario principal de la aplicación
realmente quería decir:

Cita:
El caso es que delphi toma el primer formulario creado con Application.CreateForm como formulario principal de la aplicación
El punto es, que si no usas Application.CreateForm, entonces apenas cierres el cuadro modal terminará la aplicación. En tu ejemplo usas Application.CreateForm luego de cerrar la ventana de acceso y entonces frmprincipal será el formulario principal y la aplicación terminará en cuanto se cierre.

He buscado un hilo donde se hablaba de esto pero no lo encuentro así que repito.

Puede crearse una aplicación con dos formularios, ninguno de los cuales sea el principal y sin que la aplicación se cierre al cerrar uno de ellos. Para ello, alteren el archivo dpr de manera que se vea así:

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Form1 := TForm1.Create(Application);
  Form2 := TForm2.Create(Application);

  repeat
    try
      Application.HandleMessage;
    except
      Application.HandleException(Application);
    end;
  until Application.Terminated;
end.

El caso es que Application.CreateForm establece la propiedad MainForm de Application la primera vez que se usa y Application.Run es un ciclo como el de arriba que no termina sino hasta que Application.Terminated es true.

El método Close de TForm (de hecho de TCustomForm) verifica sí es el MainForm y en caso afirmativo llama a Application.Terminate quien a su vez pone Application.Terminated en true, ocasionando que se termine el ciclo de Application.Run.

Ahora, en el ejemplo que doy, hay entonces que dar una forma alternativa de cerrar la aplicación, alguna parte donde se llama a Application.Terminate.

He hecho la prueba poniendo esto en el evento OnClose de ambos formularios:

Código Delphi [-]
  if Screen.FormCount = 1 then
    Application.Terminate;

  Action := caFree;

Si ambos formularios están abiertos, Screen.FormCount será igual a 2, así que lo único que pasa es que el formulario que se cierra se destruye.

Pero si ya se cerró uno, Screen.FormCount será igual a 1, de manera que se ejecutará Application.Terminate.

Como mencioné (creo) en el hilo que no encuentro, desconozco qué efectos colaterales pueda tener el no ejecutar Application.Run, así que habrá que tomarlo con reserva.

// Saludos

Última edición por roman fecha: 01-12-2005 a las 22:56:58.
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 15:36:04.


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