Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2010
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Form

Hola, porque no me cierra una ventana cuando en el onActivate, doy esta orden


if nvacio = 1 then
form4.close;


entra dentro del if, pasa por el close, pero sigue de largo, no se como hacer.
Gracias.
Responder Con Cita
  #2  
Antiguo 23-02-2010
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
Por favor, asigna títulos adecuados a tus mensajes y utiliza las etiquetas [code] o [delphi] para escribir código.

En cuanto a tu pregunta, no puedes cerrar una ventana desde el OnActivate u Onshow; esto es, no puedes cerrar una ventana que aun no termina de mostrarse.

Lo que puedes hacer es lanzar enviar un mensaje personalizado con PostMessage y en el manejado de dicho mensaje mandar cerrar la ventana. Busca AfterShow o CM_AFTERSHOW en los foros para ver un ejemplo de lo que digo.

// Saludos
Responder Con Cita
  #3  
Antiguo 24-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
En realidad SI se puede hacer eso. En el evento OnActivate del form podes cerrarlo sin problemas. Al menos eso me demuestra D2010.
Te recomiendo ke directamente no uses el identificador del form (o sea, "form4"). Simplemente ponele Close;
Sino, también podrias ponerle Self.Close;
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
  Close;
end;

Saludos!
Responder Con Cita
  #4  
Antiguo 24-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Seguro que así se cierra?
Responder Con Cita
  #5  
Antiguo 24-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Seguro que así se cierra?
Sip. Estaba seguro que si, pero lo probé antes de comentarlo por las dudas
Responder Con Cita
  #6  
Antiguo 24-02-2010
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
A mi me funciona tanto en el OnShow como en el OnActivate, pero, sólo si es el formulario principal. Si se usa Show para mostrar otro formulario, entonces no cierra. De hecho, me lanza la excepción:

---------------------------
Project1
---------------------------
Cannot change Visible in OnShow or OnHide.
---------------------------
Aceptar
---------------------------

// Saludos
Responder Con Cita
  #7  
Antiguo 24-02-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me imagino:
Código Delphi [-]
if nvacio = 1 then
begin
If Form4.visible = true then
form4.close;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 24-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por roman Ver Mensaje
A mi me funciona tanto en el OnShow como en el OnActivate, pero, sólo si es el formulario principal. Si se usa Show para mostrar otro formulario, entonces no cierra. De hecho, me lanza la excepción:

---------------------------
Project1
---------------------------
Cannot change Visible in OnShow or OnHide.
---------------------------
Aceptar
---------------------------

// Saludos
Tenés razón, no lo había probado en otro form que no sea el main.
Bueno, la única solución que le veo es desde el form que lo invoca.

Código Delphi [-]
//Form1 llama a Form4 en un OnClick de cualquier botón
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form4.Show;
end;

//Pero en vez de llamarlo podría verificar NVacio = 1 antes
procedure TForm1.Button1Click(Sender: TObject);
begin
  if NOT(NVacio = 1) then
    Form4.Show;
end;

Última edición por BrunoBsso fecha: 24-02-2010 a las 04:39:24. Razón: Puse mal los Forms
Responder Con Cita
  #9  
Antiguo 24-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Me imagino:
Código Delphi [-]
if nvacio = 1 then
begin
If Form4.visible = true then
form4.close;
end;

Saludos
Eso no debe funcionar, porque la propiedad "visible" de los formularios siempre es true en los OnActivate de los mismos. Así que sería una condición retórica (siempre daría true) y volvería a lanzar el mismo error.
Saludos!

Última edición por BrunoBsso fecha: 24-02-2010 a las 04:43:26. Razón: Pongo mal los tags de delphi siempre, no me acostumbro :)
Responder Con Cita
  #10  
Antiguo 24-02-2010
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 BrunoBsso Ver Mensaje
Bueno, la única solución que le veo es desde el form que lo invoca.
Puede hacerse como lo indiqué en mi primer mensaje. No obstante, yo concuerdo más contigo en el sentido de que quien debe hacer la comprobación es el formulario que llama.

// Saludos
Responder Con Cita
  #11  
Antiguo 24-02-2010
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Form cerrarlo en el onActivate

Gracias a todos, probe
if nvacio = 1 thenbeginIf Form4.visible = true thenform4.close;end;Pero me pasa de largo, tendria que existir una instancia porterior al onActivate, para cerralo ahi.
Responder Con Cita
  #12  
Antiguo 24-02-2010
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
La respuesta está desde mi primer mensaje.

// Saludos
Responder Con Cita
  #13  
Antiguo 24-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Exclamation Ya te dimos 2 soluciones

Cita:
Empezado por roman Ver Mensaje
La respuesta está desde mi primer mensaje.

// Saludos
Cita:
Empezado por roman
Lo que puedes hacer es lanzar enviar un mensaje personalizado con PostMessage y en el manejado de dicho mensaje mandar cerrar la ventana. Busca AfterShow o CM_AFTERSHOW en los foros para ver un ejemplo de lo que digo.
Ahí tenés la solución de roman que es pasándole messages.

Cita:
Empezado por BrunoBsso
Código Delphi [-]
//Form1 llama a Form4 en un OnClick de cualquier botón
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form4.Show;
end;

//Pero en vez de llamarlo podría verificar NVacio = 1 antes
procedure TForm1.Button1Click(Sender: TObject);
begin
  if NOT(NVacio = 1) then
    Form4.Show;
end;
Ahí tenés mi solución que es verificar antes de llamar al formulario.
Las dos te van a andar perfecto, parece que no las leíste.

Última edición por BrunoBsso fecha: 24-02-2010 a las 21:02:52. Razón: Los tags...
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
Determinar en un Form Principal cuando se Cierra un Form Hijo Efren2006 OOP 5 26-02-2009 20:08:35
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 14:50:16
Como llamar form desde otros form y regresar a la linea que se estaba ejecutando Willy Rodrigo C++ Builder 1 03-08-2007 19:36:23
Form modal deja que el form llamante tome el foco tata Varios 6 17-05-2006 11:51:37
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 21:41:08


La franja horaria es GMT +2. Ahora son las 02:02: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