Código Delphi
[-]
procedure TDBexplorer.Execute;
begin
CloseAction:= caFree;
Explorador:= TfmExControlsTabla.CreateTabla(Owner, FTable);
if Modal and (Owner<>nil) then
Explorador.OnDestroy:= OnDie;
.
FOldOnClose:= Explorador.OnClose;
FOldOnActivate := Explorador.OnActivate;
Explorador.OnActivate:= Activate;
Explorador.OnShow:= OnShow;
Explorador.OnEndDock:= OnEndDock;
Explorador.OnClose:= OnClose;
if FModal then
try
Explorador.ShowModal;
finally
begin
Cerrar(CloseAction);
Explorador.Free;
end;
end
else
begin
try
Explorador.Show;
except
Explorador.Free;
end;
end;
end;
Execute es publico, por tanto el usuario puede llamarlo varias veces ok¿?, vale, lo llamo una vez, se crea el Explorador. Lo llamo una segunda vez,
se vuelve a crear otro Explorador ¿y que pasa con el anterior? pues simplemente se queda perdido en memoria ram, ocupando memoria y sin que nadie lo pueda liberar, ya que Explorador apunta ya al nuevo creado.
solución:
Código Delphi
[-]
procedure TDBexplorer.Execute;
begin
CloseAction:= caFree;
if not assigned(Explorador) then
Explorador:= TfmExControlsTabla.CreateTabla(Owner, FTable);
if Modal and (Owner<>nil) then
Explorador.OnDestroy:= OnDie;
...
saludos