Ver Mensaje Individual
  #1  
Antiguo 27-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Reputación: 19
nenufer Va por buen camino
Question Liberar los componentes de un srollbox

Buenas a tod@s!! Vereis tengo un treeview en el que tengo 4 items,son los nombres de 4 tablas que tengo en paradox.
Cuando le doy a la 1º tabla quiero cree Tchecks en tiempo de ejecucion para cada campo de la tabla, hasta ahi todo bien, tengo otro procedimiento que libera de memoria todos los checks de el srollbox para que cuando le de a otro item(nombre de otra tabla) libere de memoria el srollbox y pueda crear los nuevos Tchecks de esta tabla elegida, entonces cuando ejecuto y le doy a una tabla(la 2º que elija) me genera un errror : 'Acces violation at address 0041E23E in module PVideo.exe' . Hago un try except para controlar este error y quito de tools/debugger Options/language Exception/Stop on delphi Exception. y el error ya no da. Pero no me libera todos los componentes bien y al crear nuevos tampoco lo hace bien. Pongo el codigo a ver si alguien sabe que estoy haciendo mal.

Código Delphi [-]
  //CbbCampos.Items.Clear;
  //procedimiento que libera de memoria los componentes del srollbox
  LiberarChecks();
  if Node.Text = 'Socios' then
    begin
      MostrarTabla('Socios');//Nada que ver para lo que quiero
      CargarCampos(DM.TblSocios);//Carga los checks en el srollbox
    end
  else
    if Node.Text = 'Peliculas' then
      begin
        MostrarTabla('Peliculas');
        CargarCampos(DM.TblPelis);
      end
    else
      if Node.Text = 'Provincias' then
        begin
          MostrarTabla('Provincia');
          CargarCampos(DM.TblProvin);
        end
      else
        if Node.Text = 'Alquileres' then
        begin
          MostrarTabla('Alquileres');
          CargarCampos(DM.TblAlquileres);
        end;
end;
 
procedure TFrmConsultas.CrearCheckBox(p : integer; Campo : String );
begin
  ChckBxCampo := TCheckBox.Create(self);
  ChckBxCampo.Parent := SrBxCampos;//srollbox
  ChckBxCampo.Top := p; 
  //RdBtnCampo.Name := 'RdBtn'+Campo;
  ChckBxCampo.Width := 120;
  ChckBxCampo.Left := 15;
  ChckBxCampo.Caption :=Campo;
end;
 
procedure TFrmConsultas.LiberarChecks();
var
  i : integer;
  //check : TControl;
begin
  try
    try
      for i := 0 to SrBxCampos.ControlCount do
          SrBxCampos.Controls[i].Free;
    except
      //No quiero que haga nada.
    end;
  finally
  end;
end;

Gracias de antemano
Responder Con Cita