Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija (https://www.clubdelphi.com/foros/showthread.php?t=22717)

Durbed 24-06-2005 17:39:19

En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija
 
Uso delphi7 y tengo una aplicacion MDI (casi terminada) y necesito abrir una ventana hija desde otra ventana hija. Aguien sabe como o si hay algun truco que haga que parezca que asi es. Os explico el caso concreto:

El caso es que en una ventana hija muestro un grid con datos de los contactos de una agenda, y quiero que al hacer doble clic sobre una celda del grid quiero que me abra otra ventana MDI con la infomacion del contacto. La solucion cutre es poner un panel sobre la ventana del grid y hacerlo visible, pero prefiero no hacer no eso porque queda un poco cutre, ademas asi solo podria abrir una ficha de contaco y lo bueno seria poder tener varias fichas a la vista.

Un saludo y gracias.

delphi.com.ar 24-06-2005 18:05:20

Si es abrir otra ventana que este contenida por el MDI, simplemente tienes que crear otra ventana del tipo MDIChild.
Si quieres que esta otra ventana, este contenida dentro de tu child, mira este hilo: http://www.clubdelphi.com/foros/showthread.php?t=449

Durbed 24-06-2005 18:42:26

El probela es que ya lo he intentado pero me sale un error. Lo que hago es esto:
Código:

procedure TFAgenda.AadirDireccion1Click(Sender: TObject);
 begin
  //crear la ventana de añadir direcciones
  FAltaDireccion.Create(Self);
 end;

desde una form hija de la principal y en ejecucion (al crearla), me dice que le he violado la memoria (estoy con los pantalones lo juro).

Como se hace? gracias

roman 24-06-2005 18:52:13

Esto te va a fallar llámeslo desde donde lo llames. Si no hoy, mañana.

Para crear el formulario debes hacer algo como:


Código Delphi [-]
FAltaDireccion := TFAltaDireccion.Create(Self);

// Saludos

delphi.com.ar 24-06-2005 18:57:50

¿¿Seguro que FAltaDireccion es la clase y no es una variable??

Código Delphi [-]
FAltaDireccion := TAltaDireccion.Create(Self);

Durbed 04-07-2005 19:54:30

ya me funciono con:

UAltaDirecciones.FAltaDirecciones.Create(Self);

Gracias

Lepe 05-07-2005 10:15:19

Para mi que no lo ha entendido :confused:

Si tienes declarado algo así:
Código Delphi [-]
 var Form1 :TForm1
implementation

No puedes crear la ventana con:
Código Delphi [-]
   Form1.Create(Self)

porque la primera vez que se ejecute ese código, Form1 apunta a nil, y estarás atravesando un puntero nulo al intentar acceder al método Create.

En algunos casos, puedes hacer esto:
Código Delphi [-]
with Tform1.Create(Self) do
try 
....

finally 
 Free;
end;
En este caso no se utiliza la variable Form1 para nada, pero como ves, se usa un try ... finally, para destruir el objeto al final.

Lo normal es crearlo así:
Código Delphi [-]
  Form1 :=  TForm1.Create(XXX)

XXX será el que se encargue de liberar esa ventana, si despues más abajo haces una llamada a Form1.Free, o bien freeandnil(Form1), entonces puedes sustituir XXX por nil (es decir, nadie se encarga de liberar la ventana.

Imagina que Form2, es la ventana de contactos, y al hacer doble clic, se abre el Form1 con la información detallada, Si quieres que al cerrar la ventana de contactos, se cierre automaticamente la ventana de información detallada, puedes poner
Código Delphi [-]
  Form1 :=  TForm1.Create(Form2)

Si una ventana va a estar creada durante toda la vida de la aplicación, puedes usar:
Código Delphi [-]
Application.CreateForm(TForm1, Form1);

Por tanto, tienes 3 métodos para crear ventanas, cualquier otro método que uses, tarde o temprano, como ya te han dicho, fallará.

Un saludo

Lepe 05-07-2005 10:25:36

Por cierto, ¿por qué crees que todas las clases de delphi empiezan con la letra T , Tform1, TStringList, etc..
Para recordar que es un Tipo de datos, y eliminar fallos en la creación de objetos.

Moraleja: Sigue un Estandar para nombrar componentes, tipos y variables.

Aqui tienes un hilo sobre esto

Un saludo

Durbed 05-07-2005 11:51:54

Gracias por la informacion, a ver si reviso la forma de crear las ventanas pues lo hago a imagen de un ejemplo que sqaque de un manual donde explicaba como se hacen las aplicaciones MDI.

Gracias por la informacion.


La franja horaria es GMT +2. Ahora son las 00:52:05.

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