Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2012
study study is offline
Miembro
 
Registrado: jun 2010
Posts: 18
Poder: 0
study Va por buen camino
Algún evento que trabaje con showmodal?

Hola gente, tengo el siguiente problema que me tiene hace varias horas dando vueltas, tal vez puedan ayudarme. Tengo un Form A y tengo un Form B. Con el Form A abierto, abro el Form B con Showmodal para que no puedan usar el Form A, ni ningun otro hasta cerrar el Form B. Hasta ahí justo lo que necesitaba. Mi duda es, el Form A, ¿ejecuta algún evento cuando el Form B se cierra?. onActivate no hace nada, y las soluciones que encontré son bastante feas (un timer que revisa desde el Form A que el Form B este abierto, o el evento onPaint). Puedo aceder al Form B desde el Form A, al revés no por una cuestión del diseño de la aplicación. Muy agradecido a cualquiera que lea.
Responder Con Cita
  #2  
Antiguo 08-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 08-02-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
cerrar form

puedes programar el evento onclose del formulario B para que ejecute cambios en el formulario A.

Código Delphi [-]
 
procedure TformB.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 
 
formA.labelx.caption:='Algo';
 
end;

Saludos...
Responder Con Cita
  #4  
Antiguo 08-02-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Talking

Como decía Jack el Destripador, vayamos por partes...
Cita:
Empezado por study Ver Mensaje
....Mi duda es, el Form A, ¿ejecuta algún evento cuando el Form B se cierra?...
No, no ejecuta NINGÚN evento, por que el control NO lo tiene la forma A, sino la forma B.

Cita:
Empezado por study Ver Mensaje
...Puedo aceder al Form B desde el Form A, al revés no por una cuestión del diseño de la aplicación...
Pues sí puedes acceder a la forma A desde la forma B, siempre y cuando le des un "Use Unit" dirigido a la forma A DENTRO de la forma B, y tus llamadas pueden quedar así:

Código Delphi [-]
formaB.Variable := formaA.VariableTransporte;

No es tan complicado, lo complejo es evitar las llamadas circulares, pero ése es otro tema...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #5  
Antiguo 08-02-2012
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmm y si posteriormente al frmB.showmodal en el fmrA ejecutas la accion que deseas...

algo asi


Código Delphi [-]
 
frmB.ShowModal; // aqui se activa el formB
frmA.loquesea; // esta linea se ejecutara despues de salir del frmB
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 08-02-2012
study study is offline
Miembro
 
Registrado: jun 2010
Posts: 18
Poder: 0
study Va por buen camino
@[Caral]
Cuando un form se muestra modal, el resto se "desactiva" por decirlo de alguna forma, y luego se vuelven a activar, pero en ningún momento se ejecuta el evento onDeactivate u onActivate. Mi pregunta es, hay algún evento que SI ejecuten siempre en estos casos?
Responder Con Cita
  #7  
Antiguo 08-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por study Ver Mensaje
@[Caral]
Cuando un form se muestra modal, el resto se "desactiva" por decirlo de alguna forma, y luego se vuelven a activar, pero en ningún momento se ejecuta el evento onDeactivate u onActivate. Mi pregunta es, hay algún evento que SI ejecuten siempre en estos casos?
NO, no hay ningun evento en el form que llama, en este caso el form1.
Lo correcto es crear y destruir los forms.
Desde el form que llama, en este caso el form1.
Código Delphi [-]
   Form2:=TForm2.Create(self);
   try
      Form2.ShowModal;
   finally
      Form2.Free;
   end;
Se crea, se muestra y se libera.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 08-02-2012
study study is offline
Miembro
 
Registrado: jun 2010
Posts: 18
Poder: 0
study Va por buen camino
Gracias por las ideas pero ya las había intentado todas, el tema no es pasar la información entre los formularios, sino ejecutar la instrucción precisamente en el momento que el formulario se cierra. El tema es que la estructura de formularios que manejo es bastante compleja, y ejecutar una funcion del Form A desde B se puede pero es bastante complejo por la cantidad de variables posibles.

@oscarac, probando tu idea...
Responder Con Cita
  #9  
Antiguo 08-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por study Ver Mensaje
Gracias por las ideas pero ya las había intentado todas, el tema no es pasar la información entre los formularios, sino ejecutar la instrucción precisamente en el momento que el formulario se cierra. El tema es que la estructura de formularios que manejo es bastante compleja, y ejecutar una funcion del Form A desde B se puede pero es bastante complejo por la cantidad de variables posibles.

@oscarac, probando tu idea...
Es lo mismo que dije, solo que hacer algo despues de cerrar el form:

Código Delphi [-]
Form2:=TForm2.Create(self);
   try
      Form2.ShowModal;
   finally
      Label1.caption:= 'ya cerré el form2 y tengo este dato en el form1';
     Form2.Free;
   end;

Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 08-02-2012
study study is offline
Miembro
 
Registrado: jun 2010
Posts: 18
Poder: 0
study Va por buen camino
el tema es que los forms no los estoy creando dinamicamente. En general hacerlo así funciona bastante bien. Salvo en algunos casos especificos donde creo que lo voy a solucionar asegurandome de pasarle la referencia de que objeto tiene que ejecutar que funcion al cerrarse. Muhas gracias por su ayuda, al final la solución era mucho mas sencilla de lo que yo quería hacer. Creo que pasar tanto tiempo en PHP me arruino. :P
Responder Con Cita
  #11  
Antiguo 08-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El asunto va mas alla de crear el form dinamicamente.
Si se crean todos al inicio del programa, este se vuelve muy lento.
Para que hacerlo se se va a usar un showModal ?, eso esta bien para un sencillo show.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 08-02-2012
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por study Ver Mensaje
el tema es que los forms no los estoy creando dinamicamente. En general hacerlo así funciona bastante bien. Salvo en algunos casos especificos donde creo que lo voy a solucionar asegurandome de pasarle la referencia de que objeto tiene que ejecutar que funcion al cerrarse. Muhas gracias por su ayuda, al final la solución era mucho mas sencilla de lo que yo quería hacer. Creo que pasar tanto tiempo en PHP me arruino. :P

y como lo solucionaste?
pregnuto por siacaso a alguien mas se le presente la misma inquietud
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #13  
Antiguo 08-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola study.

Si no entendí mal tu planteo, podrías hacer de este modo:

FormA:
Código Delphi [-]
...
type
  TFormA = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    procedure FormBHasClosed(Sender: TObject);
  public
  end;

var
  FormA: TFormA;

implementation 

uses Unit2; // Unidad de FormB

procedure TFormA.FormBHasClosed(Sender: TObject);
begin
  Caption:= 'FormB se ha cerrado';
end;

procedure TFormA.FormShow(Sender: TObject);
begin
  with TFormB.Create(Self) do
  begin
    HasClosed:= FormBHasClosed;
    Show;
  end;
end;
...

FormB:
Código Delphi [-]
...
type
  TNotifyEvent = procedure(Sender: TObject) of object;
  TFormB = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FCloseEvent: TNotifyEvent;
  public
    property HasClosed: TNotifyEvent read FCloseEvent write FCloseEvent;
  end;

var
  FormB: TFormB;

implementation

procedure TFormB.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FCloseEvent) then
    FCloseEvent(Self);
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 08-02-2012
study study is offline
Miembro
 
Registrado: jun 2010
Posts: 18
Poder: 0
study Va por buen camino
Código Delphi [-]
unit_menganito.form_fulanito.abrir; //funcion que ejecuta Self.showModal entre otras cosas
variable := unit_menganito.form_fulanito.getVariableQueMeInteresa; //Una vez que se cerro 
//el form rescato el dato que me importa

Así funciona bien en un caso básico. Ahora el tema es que tengo uno o dos casos donde por ejemplo formA ejecuta formB que ejecuta formA (no me miren así, se que es una aberración de diseño, lo voy a arreglar). Probablemente termine siendo algo tipo se crea y se ejecuta formA (TFormA) que crea y ejecuta FormB (TformB) que crea y ejecuta FormC (TFormA).

Espero que le sirva al proximo yo que venga con la misma duda.

@ecfisa, muy buena la de crear mi propio evento, en este caso creo que no va a ser necesario, pero me queda la nota para casos futuros.

Última edición por study fecha: 08-02-2012 a las 21:59:35.
Responder Con Cita
  #15  
Antiguo 09-02-2012
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.264
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
Cita:
Empezado por ecfisa Ver Mensaje
...podrías hacer de este modo:
+1

Pues justo iba a proponer lo mismo que Ecfisa; Es decir, si necesitas un evento, crearlo del tipo TNotifyEvent, que justo está para eso (para notificar cosas).

Creo que es el más correcto y elegante.
__________________
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
  #16  
Antiguo 09-02-2012
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Yo no estoy seguro de haber entendido bien el problema, ya que al mostrarse modal la siguiente linea de código que se procesa despues de que se cierre la ventana es la que hay justo despues de la que mostraba el form modal. Por lo que he leido, y pido disculpas si no entendi bien, creo que lo que sucede es el formulario desde el que se llama al modal necesita información seleccionada o añadida en el modal. Lo que yo suelo hacer en estos casos es crear un DataModule común a ambos formularios en el que hago todo el trabajo duro, dejando a los forms básicamente como interfaces con el usuario.
Ya digo que estoy suponiendo que realmente lo que pasa en esta aplicación en concreto es que un monton de formularios deben de compartir la información entre ellos y entendiendo que el problema básico con el que te estas encontrando es el "traspaso de datos" entre ellos.
Responder Con Cita
Respuesta


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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer que la app trabaje apenas se ejecute. mibandeja Varios 4 10-09-2008 18:19:35
¿Cómo conocer algún dato de la tupla que ha producido el evento? membrillo Firebird e Interbase 8 25-05-2007 16:33:54
Como hacer que mi alicación trabaje en Red? difesa Tablas planas 1 07-11-2006 19:13:52
CxGrid - a quien trabaje con ella, Help ! RJF Varios 2 14-10-2005 15:03:29
Que trabaje otro. marcoszorrilla Noticias 6 20-07-2005 06:50:04


La franja horaria es GMT +2. Ahora son las 09:18:33.


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