Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Formularios MDI (https://www.clubdelphi.com/foros/showthread.php?t=28405)

hmoner 19-12-2005 04:22:14

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

dec 19-12-2005 04:51:20

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? ;)

walito 13-01-2006 13:52:08

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

lucasarts_18 13-01-2006 14:23:50

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 -

maeyanes 13-01-2006 15:34:59

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...

walito 16-01-2006 00:45:14

agradesco las respuestas muy buenas y me funcionaron muy bien desde ya gracias

walito 26-01-2006 16:44:58

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

jhonny 26-01-2006 16:52:42

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.

maeyanes 26-01-2006 19:55:03

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?

walito 28-01-2006 01:31:46

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

maeyanes 30-01-2006 15:42:33

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...

Lepe 30-01-2006 16:44:18

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


La franja horaria es GMT +2. Ahora son las 01:41:38.

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