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 05-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Problema al Pasar valores entre MDI Childs

Hola, tengo dos formularios MDIChild abiertos, en uno, escribo un dato, y en el evento y antes de cerrar me gustaria pasarle ese valor al otro form. Pero cuando lo intento me tira error. (ambas units estan declaradas como uses dentro del implementation)

Pongo un ejemplo:

Código Delphi [-]
MDIChild1.Button1Click(Sender: TObject);
begin
  Edit1.text:='HOLA';
  MDIChild2.Edit1.Text:=Edit1.Text;
  Close;
end;

Como podria hacer para pasarle un dato?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 05-06-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Que error te "tira"? Cual es el texto del error?


Saludos...
Responder Con Cita
  #3  
Antiguo 05-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por maeyanes
Que error te "tira"? Cual es el texto del error?


Saludos...
Este:

Access violation at address 004FE904 in module "Project1.exe". Read of address 00000358

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 05-06-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Checa este hilo: http://www.clubdelphi.com/foros/showthread.php?t=44375

Ahí se da una posible solución a tu problema...



Saludos...

Última edición por maeyanes fecha: 05-06-2007 a las 23:07:15.
Responder Con Cita
  #5  
Antiguo 05-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por maeyanes
Checa este hilo: http://www.clubdelphi.com/foros/showthread.php?t=44375

Ahí se da una posible solición a tu problema...
Saludos...
Lo lei, pero no me queda claro como implementarlo, ya que mis dos forms estan abiertos como SHOW, y no como SHOWMODAL.
Y me pasa solo con estos 2 forms MDIChild, porque con los normales no tengo problema alguno.

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 05-06-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Aquí te pongo otro hilo donde se trató el tema:

http://www.clubdelphi.com/foros/showthread.php?t=28405


Saludos...
Responder Con Cita
  #7  
Antiguo 05-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Resulta que despues de todo, no me funciona, me sigue saliendo el mismo error.
Yo tengo los dos forms creados y abiertos.
Lo que necesito, es pasar un dato que esta en un DBGrid de uno de los formularios a un ComboBox del otro formulario.
EL formulario que se crea primero, es el que contiene el ComboBox, y es en donde defino lo siguiente:

Código Delphi [-]
TAltas = class(TForm)
...
...
 private
    { Private declarations }
     FIniciales: string; 
  public
    { Public declarations }
      property FPIniciales: String read FIniciales write FIniciales;
  end;

El el otro form, que se crea luego (desde Altas), hago lo siguiente:

Código Delphi [-]
procedure TBuscar.DBGrid1DblClick(Sender: TObject);
begin
   Altas.FPIniciales:='HOLA';
   Close;
end;

Y me sigue tirando el mismo error, incluso si leo la propiedad desde Altas (donde esta definida) me aparece vacia. Que estoy haciendo mal? me tiene todo parado esto.

Saludos y Gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 06-06-2007 a las 04:19:49.
Responder Con Cita
  #8  
Antiguo 06-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Todo lo que pruebo, me tira el mismo error. Al parecer, con los MDIChild, al ultimo form que se apunta es el ultimo creado, y al salir de este, todo se destruye, a excepcion de haber salvado un dato en una propiedad publica del formulario principal. Que raro que los MDIChil funcionen asi. No se cual sera la solucion que necesito.

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #9  
Antiguo 06-06-2007
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:
Lo lei, pero no me queda claro como implementarlo, ya que mis dos forms estan abiertos como SHOW,
Puedes omitir esa linea, pues los MdIChild se muestra al momento de crearlos.

Cita:
Hola, tengo dos formularios MDIChild abiertos, en uno, escribo un dato, y en el evento y antes de cerrar me gustaria pasarle ese valor al otro form. Pero cuando lo intento me tira error. (ambas units estan declaradas como uses dentro del implementation)
He creado 3 formularios (rapidos); 1 MDIForm y 2 MDIChild, estos dos ultimos con un Edit cada uno. Hice lo que citas y me ha funcionado de maravilla, usando en OnCloseQuery del formulario que se cerrará.

Lo tiros andan por ahí o estoy perdido?
__________________
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!
Responder Con Cita
  #10  
Antiguo 06-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por vtdeleon
Saludos
Puedes omitir esa linea, pues los MdIChild se muestra al momento de crearlos.

He creado 3 formularios (rapidos); 1 MDIForm y 2 MDIChild, estos dos ultimos con un Edit cada uno. Hice lo que citas y me ha funcionado de maravilla, usando en OnCloseQuery del formulario que se cerrará.

Lo tiros andan por ahí o estoy perdido?
Me podrias poner el código? hice todo de nuevo, algo rapido, y me sigue sin funcionar.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #11  
Antiguo 06-06-2007
Avatar de Monchi
Monchi Monchi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Cordoba, Argentina
Posts: 18
Poder: 0
Monchi Va por buen camino
Yo no lo probe pero se me ocurre ahora:
Por que no pones una clase que pertenezca al MDI que la creas al iniciar la aplicacion, a la que puedan acceder estos 2 forms, y vas actualizando las variables en esta clase, y luego en los eventos OnActivate de los forms lees estas variables y haces las actualizaciones que correspondan en dichos forms.
Es una idea, no estoy seguro que pueda funcionar bien del todo.
Saludos
__________________
"Nunca en la historia de las guerras, tuvieron aviadores que afrontar una conjunción tan terrorífica de obstáculos mortales, ni aún los de la RAF sobre Londres en 1940 o los de la LUFTWAFFE en 1945."
Responder Con Cita
  #12  
Antiguo 06-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Monchi, si, no es una mala idea ni mucho menos descabellada. Creando una clase en el MDIForm y que los MDIChild accedan a ella, y luego al notar un cambio, se actualicen donde deba, funciona, pero son tantos los datos que tengo que pasar, que se hace extremadamente engorroso. Intento buscar una forma mas sencilla.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #13  
Antiguo 06-06-2007
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
Cita:
Me podrias poner el código? hice todo de nuevo, algo rapido, y me sigue sin funcionar.
Es algo muy simple, lo que si debes asegurarte es que el formulario que recibira el dato debe estar creado, sino es asi, es seguro qe te arrojará un error.

Hay está lo que hice!
Archivos Adjuntos
Tipo de Archivo: zip Proy.zip (13,5 KB, 19 visitas)
__________________
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!
Responder Con Cita
  #14  
Antiguo 06-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
vtdeleon gracias por tomarte la molestia. Funciona perfecto lo que me mandaste, pero... es indistinto que MDIChild puede pasar un dato si estan creadas las dos?, en mi caso, abriria Form2, y desde Form2 abriria Form3, al cerrar Form3, le pasaria un dato a Form2. Cuando digo abriria, me refiero a crearia.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #15  
Antiguo 06-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Debes revisar conceptualmente la comunicación entre las ventanas MDICHILD.

La única forma de que consigas lo que buscas es mostrando las ventanas modalmente, pero una ventana mdichild no puede mostrarse de forma modal. Son dos esquemas de funcionamiento distinto.

En entornos MDI, una ventana se destruye de memoria cuando se cierra, aunque el comportamiento por defecto en delphi es minimizarse... tú decides.

Se supone que en un entorno MDI, puedes cambiar de una ventana a otra con un clic, así que, supongamos que el usuario hace lo siguiente:
- Abre el form2
- Abre el form3
- CIERRA el form2
- Cierra el form3

Si al cerrar las mdichild se minimizan, no tendrás problemas, pero si las destruyes, obtendrás un Access violation porque Form3 estará intentando acceder a Form2, pero esa ventana ya no existe en memoria.

Existen métodos para que al cerrar una ventana, se notifique a otra de ese evento, si te interesa, busca en el foro por "FreeNotification"

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 06-06-2007
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
Cita:
Empezado por mamu
abriria Form2, y desde Form2 abriria Form3, al cerrar Form3, le pasaria un dato a Form2.
Ejemplo textual...
Saludos
Archivos Adjuntos
Tipo de Archivo: zip Proy.zip (13,8 KB, 17 visitas)
__________________
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!
Responder Con Cita
  #17  
Antiguo 07-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Lepe
Debes revisar conceptualmente la comunicación entre las ventanas MDICHILD.

La única forma de que consigas lo que buscas es mostrando las ventanas modalmente, pero una ventana mdichild no puede mostrarse de forma modal. Son dos esquemas de funcionamiento distinto.

En entornos MDI, una ventana se destruye de memoria cuando se cierra, aunque el comportamiento por defecto en delphi es minimizarse... tú decides.

Se supone que en un entorno MDI, puedes cambiar de una ventana a otra con un clic, así que, supongamos que el usuario hace lo siguiente:
- Abre el form2
- Abre el form3
- CIERRA el form2
- Cierra el form3

Si al cerrar las mdichild se minimizan, no tendrás problemas, pero si las destruyes, obtendrás un Access violation porque Form3 estará intentando acceder a Form2, pero esa ventana ya no existe en memoria.

Existen métodos para que al cerrar una ventana, se notifique a otra de ese evento, si te interesa, busca en el foro por "FreeNotification"

Saludos
Segui tu sugerencia y lei un poco, que no viene nada mal. Solucione mi problema de la siguiente manera:

yo hacia

Código Delphi [-]
with TMiFormMDIChild.Create(self) do
    begin
        show;
    end;

Y lo cambie por

Código Delphi [-]
MiFormMDIChild := TMiFormMDIChild.Create(self);

Y lo solucioné.

Saludos y gracias a los dos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
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
Consulta entre valores rruffino Conexión con bases de datos 1 11-05-2007 03:25:34
pasar de un array de valores a bitmap i.larranaga C++ Builder 3 20-04-2007 05:01:04
Problema al pasar datos entre 2 formas maguib Varios 6 10-03-2005 20:19:33
Problema con JBuilder(pasar datos entre ventanas) fgabriel JAVA 0 17-02-2005 16:23:55
Valores entre formularios mdi ctronx Varios 5 16-06-2004 22:19:01


La franja horaria es GMT +2. Ahora son las 19:28:17.


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