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 19-12-2005
hmoner hmoner is offline
Miembro
 
Registrado: may 2005
Posts: 52
Poder: 19
hmoner Va por buen camino
Formularios MDI

Hola..
Una pregunta..
Usando forms MDIchild, como puedo hacer pasar los datos de un formulario MDIChild a otro Mdichild? La unica forma que encontre es pasandolos al mainform (MDIForm) y desde ahi tomarlo en un MDIchild.
como se puede hacer sin hacer todos esos pasos?

Gracias
Responder Con Cita
  #2  
Antiguo 19-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo no sé cómo estás haciéndolo exactamente; a mí se me ocurre algo así:

Código Delphi [-]
Application.MainForm.MDIChildren
¿Te parecen muchos pasos?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-01-2006
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Yo tengo ese mismo problema.

Con el ejemplo ese que nos pasaste tampoco funciona.

Resulta que yo tengo un mdichild (form8) el cual tiene una grilla que al hacer doble click me habre otro mdichild (form10) el cual al ser mostrado necesita leer una variable publica del form8, por ejemplo yo lo hago asi:

(Perdon, No se como se pega para que se vea en Código)

Código Delphi [-]
procedure TForm10.ObtenerDato(Sender: TObject);
begin
    showmessage(inttostr(Form8.IdPresupuesto));
end;

eso me muestra un numero asi 1324324234, aviendole asignado anteriormente un 5 por ejemplo

La unica solucion que encontre que no me parece la adecuada (seguro hay otra forma que no la se) es crear la variable en el form1 y al hacer 2 click sobre la grilla asignar el valor en form1.varible y cuando se muestre el form10 leerla desde ahi, no es problema hacer eso cuando son 1 o 2 variables, el problema se me hace cuando tengo muchas variables para usarlas asi.

Agradeceria si alguien tiene alguna ayuda.
Gracias

Walter

Última edición por jhonny fecha: 26-01-2006 a las 16:51:22.
Responder Con Cita
  #4  
Antiguo 13-01-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por walito

(Perdon, No se como se pega para que se vea en Código)
Al momento de responder debes buscar en el menú el objeto #, lo presionas y te aparece unos tag en el editor de respuestas, dentro de estos dice CODE, pues esto lo cambias por delphi y listo.

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 13-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Aunque me parece que en el foro ya se ha tratado este problema y dado solución, les dejo más o menos como hacer lo que desean.

En la forma donde van a usar la información (Form10, por ejemplo), crean una propiedad pública tal que:
Código Delphi [-]
type
  TForm10 = class(TForm)
  private
    FPropiedadNueva: Integer;
  public
    property PropiedadNueva: Integer 
      read FPropiedadNueva 
      write FPropiedadNueva;
  end;
Luego, en Form8, cuando se desea llamar a Form10, se puede hacer algo como esto:
Código Delphi [-]
procedure TForm8.DBGrid1DblClick(Sender: TObject);
begin
  if not Assigned(Form10) then  // Si la forma no está creada, la creamos.
    Form10 := TForm10.Create(Application);
  Form10.PropiedadNueva := 123 // Aquí asignan el valor que necesiten pasar a Form10.
end;
Ya con eso, dentro de Form10 ya se puede usar el valor pasado desde la otra forma.
Código Delphi [-]
procedure TForm10.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(FPropiedadNueva))
end;


Saludos...
Responder Con Cita
  #6  
Antiguo 16-01-2006
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
agradesco las respuestas muy buenas y me funcionaron muy bien desde ya gracias
Responder Con Cita
  #7  
Antiguo 26-01-2006
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Marcos, hice exactamente lo que me explicaste en el post anterior
pero no hace nada, es decir le asigno un valor a la variable y cuando
quiero ver si realmente lo asigno con el showmessage no me muestra nada, ni un numero cualquiera, es decir me sale el cartel vacio.

En que le puedo estar fallando? es exactamente lo mismo hice..

Saludos

walter
Responder Con Cita
  #8  
Antiguo 26-01-2006
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
walito Modifique tu post anterior para que vieras como se aplican las etiquetas Delphi , de esa manera puedes darle click en Editar y ver como lo hice.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 26-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Cita:
Empezado por walito
Marcos, hice exactamente lo que me explicaste en el post anterior
pero no hace nada, es decir le asigno un valor a la variable y cuando
quiero ver si realmente lo asigno con el showmessage no me muestra nada, ni un numero cualquiera, es decir me sale el cartel vacio.

En que le puedo estar fallando? es exactamente lo mismo hice..

Saludos

walter
En que evento de la forma o sus componentes estás llamado el ShowMessage para mostrar el valor?
Responder Con Cita
  #10  
Antiguo 28-01-2006
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
te explico mas o menos como lo uso yo.
Tengo el form1 que es el form principal del programa y es un MDIForm
despues tengo 2 form, form2 y form3 q son MDIChild.

Bien, cuando arranca el programa se crean todos los form y luego los cierro(close) a todos los MDIChild, osea q ya estan creados.

Luego creo la propiedad que mensiona maeyanes en Form3 y desde form2 hago lo siguiente cuando hago doble click en una grilla por ejemplo:

Código Delphi [-]
Form3.PropiedadNueva := 123;

y cuando muestro el form3 en un boton le pongo:

Código Delphi [-]
showmessage(inttostr(PropiedadNueva));

y no me muestra nada.
Que puedo estar haciendo mal?

gracias

walter
Responder Con Cita
  #11  
Antiguo 30-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
No veo nada extraño en ese código, pero no indicas como declaras la propiedad. Compara tu código con este que te pongo:
Código Delphi [-]
{ En la sección privada de la forma creas un campo que va a contener el
valor de la propiedad. }
TForm2 = class(TForm)
private
  FPropiedadNueva: Integer;
public
{ Declaras la propiedad pública, la cual usa FPropiedadNueva }
  property PropiedadNueva: Integer
    read FPropiedadNueva
    write FPropiedadNueva;
end;
Con esto debería funcionar lo que estás haciendo.

Comentas que cierras todas las formas MDIChild al momento de ejecutar tu programa, si no quieres que esas formas se creen automáticamente, quítalas de la lista de Auto-create forms de la pestaña Forms en las opciones del proyecto (Shift+Ctrl+F11).


Saludos...
Responder Con Cita
  #12  
Antiguo 30-01-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por walito
Bien, cuando arranca el programa se crean todos los form y luego los cierro(close) a todos los MDIChild, osea q ya estan creados.
Me extraña un poco esa afirmación. Un mdiChild no puede ocultarse así por las buenas, solo minimizarse o destruirse. ¿Los tienes minimizados?

- Si estan minimizados, no tiene sentido que funcione mal.
- si no están minimizados, entonces realmente no estan creados,es decir, se crearon, despues se destruyeron, pero el Form queda con una referencia inválida, de ahí que muestre el valor que pille en memoria.... pero tarde o temprano debería dar un Access Violation.

En el el formClose de cada ventana, añade:
Código Delphi [-]
procedure Tform2.Close(....);
begin
  action := cafree;
  form2 := nil;
end;
Eso para el form2 y 3

Si al hacer ese cambio ves que tu programa empieza a dar Access Violation cada dos por tres, entonces, es que debes estudiar mejor como crear y destruir las ventanas.

Haz este pequeño experimento y nos comentas

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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 23:32:34.


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