Fórum como destruir objeto de um componente ? #338054
20/02/2007
0
Estou desenvolvendo um componente nele crio um objeto quanto uma propriedade no Object Insperctor é mudada para TRUE, até aí tudo ok, o problema é quando muda para FALSE eu tenho q destruir esse objeto, mas não da certo sempre da erro.
Eu testo se objeto já foi criado assim
if Assigned(Objeto) then
E já tentei destruir com Destroy ( ele até destroi mas some o componente também), tentei o Objeto.Destroy (da erro), FreeAndNil(Objeto) mas retorna erro também...
Alguem sabe alguma dica para esses casos ??
Obrigado.
Aguardo resposta.
Exxpert
Curtir tópico
+ 0Posts
20/02/2007
Massuda
if Assigned(SeuObjeto) then begin SeuObjeto.Free; SeuObjeto := nil; end
Gostei + 0
20/02/2007
Exxpert
if Assigned(SeuObjeto) then begin SeuObjeto.Free; SeuObjeto := nil; end
Tudo bem Massuda,
Fiz como você disse mas continua dando erro:
Acess violation at adress 400057B0 in module ´rtl70.bpl´. Read of adress 6AEC8B51.
Sabe oque pode estar acontendo ?
Lembrando que é um componente, ao destruir o objeto ele esta trabalhando em modo design nada executavel.
Obrigado.
Aguardando Resposta.
Gostei + 0
20/02/2007
Massuda
Gostei + 0
20/02/2007
Exxpert
Pela minha analise não era para estar ocorrendo isso, mas se você puder analisar o código abaixo (só nesse trecho de código faço a utilização desse objeto), talvez consiga detectar algo que eu não estou enxergando.
procedure TRaveIntegrado.SetUsarDataSet(const Value: boolean); var rdData: TRvDataSetConnection; begin FUsarDataSet := Value; if FUsarDataSet then begin rdData := TDataSetConnection.Create(Self); rdData.Name := Name + ´Con´; rdData.RuntimeVisibility := rtDeveloper; rdData.DataSet := FligDataSource; end else begin if Assigned(rdData) then begin rdData.Free; //gera o erro que comentei aqui no post rdData := nil; end; end; end;
Obrigado Massuda.
Aguardo resposta.
Gostei + 0
20/02/2007
Massuda
Outra coisa é declarar rdData como sendo de uma classe mas estar criando um objeto de uma classe diferente (possivelmente ancestral da classe correta). Isso costuma dar problemas difíceis de diagnosticar.
Gostei + 0
20/02/2007
Exxpert
Massuda matou o problema era porque eu estava declarando a variável naquela procedure mesmo, eu declarei ela agora como global e esta funcionando 100¬. Obrigado.
Sobre declara rdData como de uma classe e criar como outra foi erro na hora de passar o código aqui.
Obrigado novamente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)