Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   No puedo matar los componentes (https://www.clubdelphi.com/foros/showthread.php?t=27157)

ilichhernandez 13-11-2005 23:26:26

No puedo matar los componentes
 
Despues de 10 horas de trabajo en dia domingo.....uffffff, avanzo pero con algunas dudas..... espero que sea la ultima del dia.....
Resulta que creo varios componentes tlabel en tiempo de ejecucion , pero no puedo eliminarlos despues, he revisado 5 o 6 hilos con temas similares ( asi que disculpad las molestias) pero que no me queda claro......(tal vez sea el sueño)..... pero bueno hay que seguir...... gracias por el tiempo que dedican amigos......

Código Delphi [-]
procedure Tform_comparacion.cxButton2Click(Sender: TObject);
Var
n:Integer;
begin
  for n:=0 to Form_comparacion.ComponentCount -1  do
  begin

    if ((Components[n] is Tlabel) and ((Components[n].tag = 5)or(Components[n].Tag = 4))) then
    Tlabel(Components[n]).Free;
  end;   
form_comparacion.Close;
end;

ilich hernandez.:eek:

vtdeleon 14-11-2005 00:58:48

Saludos

Para qué liberarlo tu mismo?, el formulario se encargara de su destruccion. No hay necesidad de eso, a menos que ese formulario no tenga el control de estos labels.

Como sabes que estos no se liberan??, el codigo que pones es una operacion que de seguro se ejecuta muy rapido.

ilichhernandez 14-11-2005 01:54:26

Estos
labels los cargo desde otro form, cuando necesito realizar una operacion sobre este me reclama que los labels ya existen.... entonces la necesidad de eliminarlos manualmente...son label creados en tiempo de ejecucion.... y que a lo largo de la ejecucion del programa pueden necesitarse cargar nuevamente con otros datos....

vtdeleon 14-11-2005 04:15:57

Saludos

Pienso que la mejor solucion para esto, y no complicar mucho, es crear el label de modo que el formulario que cierras se encargue de destruirlo.
Código Delphi [-]
label1:=tlabel.Create(TForm_comparacion);
Con esto el formulario Form_comparacion se encargara de su destruccion.

Neftali [Germán.Estévez] 14-11-2005 09:50:11

Puede ser que tengas problemas a la hora de eliminar controles de la lista empezando por el principio; Haz ésta pequeña modificación en el código y debería funcionar sin problemas.

Código Delphi [-]
 Var
   n:Integer;
 begin
   // Modificamos el orden del recorrido.
   for n:=(Form_comparacion.ComponentCount -1) downto 0 do begin
 
     if ((Components[n] is Tlabel) and ((Components[n].tag = 5)or(Components[n].Tag = 4))) then
       Tlabel(Components[n]).Free;
   end;
 
   // De paso pon çéste mensaje para comprobar que ya se han eliminado
   MessageDlg('Eliminados los Labels', mtWarning, [mbOK], 0);
 
   form_comparacion.Close;

ilichhernandez 14-11-2005 13:17:16

Muchas Gracias..... el codigo que has propuesto ha funcionado de las mil maravillas!!!, gracias a todos por sus ayudas !!!!

GRacias.


La franja horaria es GMT +2. Ahora son las 07:08:24.

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