Guiodai 0 Denunciar post Postado Julho 23, 2007 Olá, amigos.Recentemente comecei a receber um erro em tempo de execução no programa que estou desenvolvendo. O erro não acontece sempre e eu não consegui identificar em que trecho do código ele ocorre. O código do erro 216. O que este código significa e o que pode estar causando ele? Desde já, obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Julho 23, 2007 Coloca aqui o trecho do código em que é levantada essa Exceção e também o que você faz no programa que gera esse erro.... Compartilhar este post Link para o post Compartilhar em outros sites
Guiodai 0 Denunciar post Postado Julho 23, 2007 Coloca aqui o trecho do código em que é levantada essa Exceção e também o que você faz no programa que gera esse erro....Não identifiquei em que parte do programa acontece o erro. O erro acontece depois que um form é exibido. Esse form exibe um TChart. O gráfico exibe coordenadas (x,y) que estão armazenadas em um arquivo XML. Vou mostrar o trecho do código que faz essa chamada.procedure TFormMain.Coordenogramacompleto1Click(Sender: TObject);var tensaoAnterior: real; index, idxCor: integer; linhaTemp: TCabo; barraTemp: TBarra; cores: array of Integer;begin SetLength(cores, 10); cores[0] := clBlue; cores[1] := clGreen; cores[2] := clRed; cores[3] := clMaroon; cores[4] := clOlive; cores[5] := clPurple; cores[6] := clNavy; cores[7] := clTeal; cores[8] := clFuchsia; cores[9] := clActiveCaption; cores[10] := clGray; DlgConfigCoordenograma.LabeledEditIcc.Text := FloatToStr(protecaoClicada.BarraAssociada.CurtoCircuito); DlgConfigCoordenograma.ShowModal; if ConfigCoordenogramaOk then begin Icc := StrToFloat(DlgConfigCoordenograma.LabeledEditIcc.Text); barraTemp := protecaoClicada.BarraAssociada; tensaoAnterior := protecaoClicada.Tensao; idxCor := 0; while barraTemp <> Barra1 do begin for index := 0 to linhas.Count - 1 do begin linhaTemp := linhas.Items[index]; if linhaTemp.BarraDestino = barraTemp then break; end; if linhaTemp.ProtecaoFase <> nil then begin protecaoClicada := linhaTemp.ProtecaoFase; fatorConversao := tensaoAnterior / protecaoClicada.Tensao; Coordenogramasimples(protecaoClicada, Icc, fatorConversao, 1, cores[idxCor]); tensaoAnterior := protecaoClicada.Tensao; end; barraTemp := linhaTemp.BarraOrigem; idxCor := idxCor + 1; if idxCor = 11 then idxCor := 0; end; FormCoordenograma.Show; end;end;procedure TFormMain.Coordenogramasimples(prot: TProtecao; Icc, fc, fe: real; cor: TColor);var cabo: TCabo; protNeutro: TProtecao; codFase, codNeutro: integer; nomeFase, nomeNeutro: string; pkpFase, pkpNeutro: real; index: integer;begin for index := 0 to linhas.Count - 1 do begin cabo := linhas[index]; if cabo.ProtecaoFase = prot then protNeutro := cabo.ProtecaoNeutro; end; codFase := prot.Codigo; nomeFase := prot.Nome; pkpFase := prot.CorrentePkp; codNeutro := protNeutro.Codigo; nomeNeutro := protNeutro.Nome; pkpNeutro := protNeutro.CorrentePkp; case prot.TipoProtecao of tpFusivel: begin FormCoordenograma.PlotarCurvaPontos('dados\curvas_fusiveis.xml', codFase, 'Corrente', 'Tempo', 'Min', 1, Icc*fc, fe, FormCoordenograma.ChartFase, cor, nomeFase); FormCoordenograma.PlotarCurvaPontos('dados\curvas_fusiveis.xml', codFase, 'Corrente', 'Tempo', 'Max', 1, Icc*fc, fe, FormCoordenograma.ChartFase, cor, nomeFase); FormCoordenograma.Hachurar(FormCoordenograma.ChartFase, FormCoordenograma.ChartFase.Series[FormCoordenograma.ChartFase.SeriesCount - 2], FormCoordenograma.ChartFase.Series[FormCoordenograma.ChartFase.SeriesCount - 1], cor); FormCoordenograma.PlotarCurvaPontos('dados\curvas_fusiveis.xml', codNeutro, 'Corrente', 'Tempo', 'Min', 1, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro); FormCoordenograma.PlotarCurvaPontos('dados\curvas_fusiveis.xml', codNeutro, 'Corrente', 'Tempo', 'Max', 1, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro); FormCoordenograma.Hachurar(FormCoordenograma.ChartNeutro, FormCoordenograma.ChartNeutro.Series[FormCoordenograma.ChartNeutro.SeriesCount - 2], FormCoordenograma.ChartNeutro.Series[FormCoordenograma.ChartNeutro.SeriesCount - 1], cor); end; tpReleEletromec: begin FormCoordenograma.PlotarCurvaPontos('dados\curvas_reles.xml', codFase, 'Multiplo', 'Tempo', prot.DadosRele.Curva, pkpFase, Icc*fc, fe, FormCoordenograma.ChartFase, cor, nomeFase + ' (Curva ' + prot.DadosRele.Curva + ')'); FormCoordenograma.PlotarCurvaPontos('dados\curvas_reles.xml', codNeutro, 'Multiplo', 'Tempo', protNeutro.DadosRele.Curva, pkpNeutro, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro + ' (Curva ' + protNeutro.DadosRele.Curva + ')'); end; tpReleNumerico: begin FormCoordenograma.PlotarCurvaReleNumerico(prot.DadosRele.NormaCurva, prot.DadosRele.FamiliaCurva, prot.DadosRele.Curva, pkpFase, Icc*fc, 1, FormCoordenograma.ChartFase, cor, nomeFase + ' (Curva ' + prot.DadosRele.NormaCurva + ' ' + prot.DadosRele.FamiliaCurva + ' ' + prot.DadosRele.Curva + ')'); FormCoordenograma.PlotarCurvaReleNumerico(protNeutro.DadosRele.NormaCurva, protNeutro.DadosRele.FamiliaCurva, protNeutro.DadosRele.Curva, pkpNeutro, Icc*fc, 1, FormCoordenograma.ChartNeutro, cor, nomeFase + ' (Curva ' + protNeutro.DadosRele.NormaCurva + ' ' + protNeutro.DadosRele.FamiliaCurva + ' ' + protNeutro.DadosRele.Curva + ')'); end; tpReligador: begin FormCoordenograma.PlotarCurvaPontos('dados\curvas_religadores.xml', codFase, 'Multiplo', 'Tempo', prot.DadosReligador.Curva, pkpFase, Icc*fc, fe, FormCoordenograma.ChartFase, cor, nomeFase + ' (Curva ' + prot.DadosReligador.Curva + ')'); case codFase of 3001..3003: begin FormCoordenograma.PlotarCurvaPontos('dados\curvas_religadores.xml', codNeutro, 'Multiplo', 'Tempo', protNeutro.DadosReligador.Curva + ' Min', pkpNeutro, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro + ' (Curva ' + protNeutro.DadosReligador.Curva + ')'); FormCoordenograma.PlotarCurvaPontos('dados\curvas_religadores.xml', codNeutro, 'Multiplo', 'Tempo', protNeutro.DadosReligador.Curva + ' Max', pkpNeutro, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro + ' (Curva ' + protNeutro.DadosReligador.Curva + ')'); FormCoordenograma.Hachurar(FormCoordenograma.ChartNeutro, FormCoordenograma.ChartNeutro.Series[FormCoordenograma.ChartNeutro.SeriesCount - 2], FormCoordenograma.ChartNeutro.Series[FormCoordenograma.ChartNeutro.SeriesCount - 1], cor); end else begin FormCoordenograma.PlotarCurvaPontos('dados\curvas_religadores.xml', codNeutro, 'Multiplo', 'Tempo', protNeutro.DadosReligador.Curva, pkpNeutro, Icc*fc, fe, FormCoordenograma.ChartNeutro, cor, nomeNeutro + ' (Curva ' + protNeutro.DadosReligador.Curva + ')'); end; end; end; else end;end;Esse programa serve para mostrar curvas de relés e fusíveis de proteção de sistemas elétricos. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Julho 23, 2007 Fera, coloca um breakpoint aew...debuga e ve em que linha da o erro...Após descobrir a linha em que a exceção é levantada posta ela aqui...colocando o code inteiro fica complicado ajudar... Compartilhar este post Link para o post Compartilhar em outros sites
Guiodai 0 Denunciar post Postado Julho 26, 2007 Fera, coloca um breakpoint aew...debuga e ve em que linha da o erro...Após descobrir a linha em que a exceção é levantada posta ela aqui...colocando o code inteiro fica complicado ajudar...O problema é que não consegui identificar onde o erro acontece. Já debuguei de tudo quanto é jeito mas o erro só acontece depois que o programa termina a operação!O que significa o erro 216? Compartilhar este post Link para o post Compartilhar em outros sites
Carlos Edu 0 Denunciar post Postado Julho 27, 2007 Bom dia, e ai beleza?Seguinte, você tem certeza que seu programa ta dando erro por causa deste form? remove ele do seu project e roda pra ver se acontece o erro. Ta usando algum outro componente externo? Um Skin quem sabe. Na verdade este tipo de erro que nao acontece em tempo de execução é causado por algum componente que nao seja do delphi. Faz os teste aí. Compartilhar este post Link para o post Compartilhar em outros sites
gessimarjunior 0 Denunciar post Postado Julho 27, 2007 Clica no menu do delphi:Tools -> Debugger Options -> Language Exceptions -> Stop on Delphi ExceptionsCom isso o delphi para onde está acontecendo o erro. Compartilhar este post Link para o post Compartilhar em outros sites
Guiodai 0 Denunciar post Postado Julho 28, 2007 Bom dia, e ai beleza?Seguinte, você tem certeza que seu programa ta dando erro por causa deste form? remove ele do seu project e roda pra ver se acontece o erro. Ta usando algum outro componente externo? Um Skin quem sabe. Na verdade este tipo de erro que nao acontece em tempo de execução é causado por algum componente que nao seja do delphi. Faz os teste aí.Na verdade, eu criei alguns componentes visuais que são herdeiros da classe TShape. Eu crio várias instâncias destes componentes ao longo do programa! Pode ser isso? Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Julho 28, 2007 Você fez o destructor deles?? Está liberando-os da memória ao finalizar o sistema??? A mensagem desse erro Runtime Error 216 refere-se á: General protection faulte em minhas pesquisas pela net encontrei diversos casos com esse problema e o que acontecia era que as pessoas estavam liberando da memória diversas vezes o mesmo componente, sendo assim o mesmo levantava esse Runtime Error 216 dizendo que o Objeto já havia sido destruido.. Compartilhar este post Link para o post Compartilhar em outros sites