Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Question componentes en tiempo de ejecución

Hola!!!
una pregunta...
mirad, creo en tiempo de ejecución creo unos componentes dentro de una ventana en mi aplicación. Al cerrar y volver a abrir la ventana me da error porq me dice q los componentes ya estan creados.
Como se hace para destruirlos(o algo así) cada vez que se cierre la ventana(o antes de crearlos)?
Yo los creo así:
p[i]:=Tpanel.Create(self);
...
p[i].ParentWindow:=Ppal.Handle;
...
bueno...espero haberme explicado
Gracias.
Un saludo
Responder Con Cita
  #2  
Antiguo 07-05-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Tienes q destruir la form tb; FreeAndNil(form1)
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #3  
Antiguo 07-05-2005
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
lo que sucede es que si trabajas con formularios normales, eso quiere decir que no se destruyen al cerrarse tendrias que destruirlos tu, si colocas el owner de los componentes como self eso quiere que el formulario se encarga de destruirlos antes de destruirse el, la solucion que se me ocurre es la siguiente:

Mostrar el formulario tipo modal y destruirlo despues de la ejecución:

Código Delphi [-]
if not Assigned(MiForm) then MiForm := MiForm.Create(nil);
try
   miform.Showmodal;
finally
   FreeanNil(MiForm);
end;

Destruir los componentes en el evnto onClose del formulario
Código Delphi [-]
while MiForm.ControlCount > 0 do
begin
   FreeandNil(MiForm.Controls[0]);
end;

Suerte espero te sirva
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 08-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Thumbs up Gracias

probaré a ver que tal
Responder Con Cita
  #5  
Antiguo 08-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Unhappy no funciona

no se que es eso del modo modal ,pero bueno

FreeandNil(MiForm.Controls[0]);<---esto me da error
y freeAndNil(Fcentral); lo he puesto pero sigue sin funcionar

no sé...seguiré intentando
un saludo
Responder Con Cita
  #6  
Antiguo 08-05-2005
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por Maga84
no se que es eso del modo modal ,pero bueno
Se dice que un formulario es modal cuando la ejecución de tu programa se detiene por completo hasta que se ejecute una accion sobre ese formulario.

Cita:
Empezado por Maga84
FreeandNil(MiForm.Controls[0]);<---esto me da error
Y el error es???

Cita:
Empezado por Maga84
freeAndNil(Fcentral); lo he puesto pero sigue sin funcionar
Y donde lo pusistes, seguro que fue en el llamado al formulario y tu formulario lo mostrastes MODAL??
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 08-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues no entiendo yo esto....

Si al crear los controles le dices que el owner es el Form, la ventana se engargaría de destruirlo no??

Creo que lo único que habría que hacer en el onClose, además de poner action := CaFree, sería poner a nil la matriz de controles p

La matriz p está situada en la misma ventana o en otra distinta¿?


Tampoco entiendo por qué usas Parentwindow, ¿no se debería usar simplemente la propiedad Parent?

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 08-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Wink jajjaja

la matriz esta dentro del propio formulario...
yo tampoco sé porq uso algunas cosas...
bueno, voy a ver si me aclaro y ahora os cuento
gracias
Responder Con Cita
  #9  
Antiguo 08-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Smile lepe

lo estoy intentando como tu dices
pero mi matriz es estática.No me deja ponerla a nil
ah por cierto ya me he dado cuenta de que lo de parentwindow era un tonteria
como vacio de componentes las matrices dinámicas

...
perdonadme, hoy estoy un poco...

gracias
un saludo
Responder Con Cita
  #10  
Antiguo 08-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Thumbs up ya!!!

ya funciona bien(o eso parece)
lo que he hecho es crear los componentes en el formshow y no en el create,y en el evento onclose,he recorrido los arrays(son estáticos) y he ido haciendo
p[i].destroy;
edt[i].destroy;
...
así cuando cierro y vuelvo a abrir la ventana no pasa nada raro. No se si era la mejor solución pero al menos ya hace lo que quiero

Lepe ¿que es lo de CaFree?

oye, muchas gracias
Responder Con Cita
  #11  
Antiguo 09-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Reholas,

Para crear los paneles:
Código Delphi [-]
procedure Tform1.button1Click(...)
begin
  p[i] := Tpanel.Create(nil)
end;
Estoy diciendo que nadie se encargue de liberar los paneles, ya que nosotros lo haremos manualmente.

Y al cerrar la ventana:
Código Delphi [-]
for i:= low(p) to high(p) do
  freeandnil(p[i])

caFree, es el valor del parámetro CloseAction del evento OnClose de la ventana.

Cuando una ventana se cierra, bien por código o bien pulsando la X de la ventana, se llama a ese evento, despues se comprueba si hay código en el evento OnCloseQuery, y por ultimo se ejecuta el código existente en el evento OnClose.

Modificando el parámetro CloseAction, puedes modificar el comportamiento de la ventana al cerrarse. Los valores posibles son:
Código:
caMinimize = al pulsar sobre la X, la ventana, se minimiza.
caHide     = se oculta
cafree     = se libera la ventana de memoria, y todos los recursos asociados
caNone     = la X no hace nada
Por supuesto, si usas caFree, para volver a ver la pantalla tendrás que usar algo como:
Código Delphi [-]
Application.CreateForm(Tform1, Form1);
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 15-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
ahora tengo otro problema

cuando cierro el formulario me da un error en otro evento en el que trabajo con componentes de estos que he liberado...voy a repasar todo otra vez
q desastre soy...
Responder Con Cita
  #13  
Antiguo 16-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si trabajas de esta forma, siempre que vayas a acceder a p[i] deberías preguntar si es distinto de nil, para que no traspases un puntero nulo.

Código Delphi [-]
if assigned(p[i]) then
 // accedo con total alegria a p[i]

Perdona por no haberlo comentado en el post anterior

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 21-05-2005
Avatar de Maga84
Maga84 Maga84 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Madrid
Posts: 36
Poder: 0
Maga84 Va por buen camino
Smile aii

ya por fin!!!gracias lepe
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 06:21:52.


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