Fórum Destruir componentes #290480
03/08/2005
0
Grato
Zlink
Curtir tópico
+ 0Posts
03/08/2005
Ivanh
depois basta percorrer o vetor e destruir
Ex.:
vetorbotoes[i] := TButton.Create(nil);
Gostei + 0
03/08/2005
Adriano Santos
procedure DestruirComps;
var
I : Integer;
begin
for I := 0 to Form1.ComponentCount-1 do
begin
//verifica se o componente é da classe que se deseja destruir
if Form1.Components[I] is TButton then
{seu codigo de destruição +/- assim}
Form1.Components[I].Free;
//não sei se vai funcionar só com o Free
//talvez tenha que usar o Destroy junto com o Nil
end;
end;
Gostei + 0
03/08/2005
Ivanh
procedure DestruirComps;
var
I : Integer;
begin
for I := 0 to Form1.ComponentCount-1 do
begin
//verifica se o componente é da classe que se deseja destruir
if Form1.Components[I] is TButton then
{seu codigo de destruição +/- assim}
Form1.Components[I].Free;
//não sei se vai funcionar só com o Free
//talvez tenha que usar o Destroy junto com o Nil
end;
end;
não esqueça que o [b:0ba5c2753f]infoagenda[/b:0ba5c2753f] soh quer destruir os componentes criados em tempo de execucao
Gostei + 0
03/08/2005
Zlink
List index out of bounds (137)
Como eu resolvo este problema ?
Gostei + 0
03/08/2005
Adriano Santos
Puts, é mesmo. Neste caso serão excluídos todos os componentes da classe informada inclusive os criados em tempo de projeto. O que vc pode fazer [b:a6117e1aa7]infoagenda[/b:a6117e1aa7] é na hora de localizar o componente verificar se ele foi criado em tempo de execução apartir de uma lista criada, por exemplo:
procedure DestruirComps; var I : Integer; procedure LocalizaCompNoArray(SeuBotaoProcurado: String) : Boolean; var J : Integer; begin for J := 0 to High(SeuArrayDeBotoes) do if SeuBotaoProcurado = SeuArrayDeBotoes[J] then begin Result := True; Break; end; end; begin for I := 0 to Form1.ComponentCount-1 do begin //verifica se o componente é da classe que se deseja destruir if Form1.Components[I] is TButton then //localiza seu botao criado em execução dentro do Array if LocalizaCompNoArray(Form1.Components[I].Name) then //localizou então exclui Form1.Components[I].Free; end; end;
Daí no momento da criação dos seus botões você então joga no Array o Name de cada botão criado.
Gostei + 0
03/08/2005
Adriano Santos
Cara, eu digitei o código fonte direto aqui no fórum e não testei. Esse erro é quando você tah fazendo referência a um item da lista que não existe. Por exemplo uma lista de 5 itens enumeradas da seguinte forma:
0
1
2
3
4
Se tentar acessar o iten 5 não vai conseguir, pois a lista começa em 0, ou seja, o item cinco é o numero 4. Por isso da esse erro.
Gostei + 0
03/08/2005
Massuda
... for I := Form1.ComponentCount-1 downto 0 do ...
Sobre como diferenciar um componente criado em tempo de execução de um criado em tempo de projeto via IDE, um dos modos de diferenciar um do outro é convencionar que, ao criar um componente em tempo de execução, utiliza um determinado nome sequencial ou não utiliza nome algum (por nome entenda a propriedade Name).
Gostei + 0
03/08/2005
Adriano Santos
... for I := Form1.ComponentCount-1 downto 0 do ...
O Massuda tem razão, até mesmo porque o ComponentCount vai diminuir a cada exclusão de componente.
Em relação a isso, eu sei que o Free chama o Destroy, mas confesso que nem me passou pela cabeça na hora de responder...rs.
Cada um tem uma forma de diferenciar. A forma que mencionei foi baseada na resposta do amigo [b:cb70e68f07]ivanh[/b:cb70e68f07]. Existem outras formas como a mencionada pelo [b:cb70e68f07]Massuda[/b:cb70e68f07], ou por exemplo tomar como regra mudar a propriedade Tag do compoente criado em Execução para diferenciar dos demais.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)