Ver Mensaje Individual
  #1  
Antiguo 23-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Los aportes y mensajes de cada uno

Algunas veces surgen comentarios sobre la cantidad de mensajes que tiene este o aquel usuario, o las buenas respuestas que da uno u otro.
Yo sé que mis respuestas son normalmente bastante escuetas, secas, cortas y otros usuarios se toman su tiempo en contestar incluso con buenos ejemplos.
Lo digo porque me ha llamado la atención este hilo donde se ve claramente la diferencia entre uno y otro, a la hora de contestar.
Un usuario pregunta por la mejor manera de liberar un TLabel creado en tiempo de ejecución.
Respuesta de Casimiro Notevi:
Cita:
Empezado por Casimiro Notevi
¿Cómo lo has creado?
Respuesta de ecfisa:

Cita:
Empezado por ecfisa
Hola Carlos.

Como bién apunta Casimiro, todo depende como hiciste la creación. Si la hiciste sobre una variable a la que tenes acceso basta con que uses
Código Delphi [-]
Nombre_de_Variable.Free;
donde desees.

Si la creaste al vuelo, por ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject); begin   with TLabel.Create(Self) do // Owner es Self   begin      Name:= 'MiLabel';     ... end;

basta con hacer
Código Delphi [-]
TLabel(FindComponent('MiLabel')).Free;

En cambio si su hiciste su owner igual a nil, para que se oculte y libere tendrías que hacer:
Código Delphi [-]
 with FindComponent('Label1') do  begin    Parent:= nil;     Free;  end;

Si son muchos los controles creados quizá te pueda servir hacer:
Código Delphi [-]
uses contnrs;  
var  ObjLst: TObjectList;  (* Crear 20 Labels *) 
procedure TForm1.FormCreate(Sender: TObject);
  var   i: Integer; 
  L: TLabel; 
begin   ObjLst:= TObjectList.Create;   
  for i:= 0 to 19 do  // 20 Labels   
  begin     
    L:= TLabel.Create(nil);     
    L.Left:= 20;     
    L.Top:= 20 * i + 30;     
    L.Caption:= 'Label'+IntToStr(i+1);     
    ObjLst.Add(L);     
    TLabel(ObjLst[i]).Parent:= Self;   
  end; 
end;  (* Liberar Labels creados *) 

procedure TForm1.LiberarClick(Sender: TObject); 
begin   
  FreeAndNil(ObjLst); 
end;

Saludos.
En fin, ¿calidad de los aportes?, ahí se ve claramente

Última edición por Casimiro Notevi fecha: 23-03-2012 a las 21:21:06.
Responder Con Cita