darth_ivan Postado Maio 9, 2008 Denunciar Share Postado Maio 9, 2008 Pessoal,algum de vocês já se deparou com esse erro ao destruir um formulário?Valeu... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 9, 2008 Denunciar Share Postado Maio 9, 2008 algum de vocês já se deparou com esse erro ao destruir um formulário?Operação Invalida com ponteirocoloque o codigo que esta usando para destruir o formularioabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 9, 2008 Autor Denunciar Share Postado Maio 9, 2008 (editado) Result := False; v_Form := a_Arg.GetRAW(a_RawTagName); if Assigned(v_Form) then begin blu := Tblu.Create(nil); try TagToForm; if ShowModalDock(blu, f_Main) = mrOk then FormToTag; finally blu.Free; end; end; Editado Maio 10, 2008 por Micheus Adicionada a tag CODE para melhor visualização do código. Use-a também. ;-) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 9, 2008 Denunciar Share Postado Maio 9, 2008 De acordo com o Help do DelphiUse Release to destroy the form and free its associated memory.Use Release para destruir o Form e liberar a memoria associadatry TagToForm; if ShowModalDock(blu, f_Main) = mrOk then FormToTag; finally blu.Release; end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 9, 2008 Autor Denunciar Share Postado Maio 9, 2008 Isto ainda não solucionou meu problema... continua o mesmo erro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 9, 2008 Denunciar Share Postado Maio 9, 2008 O problema pode estar na maneira como voce cria este Form, veja outras formashttp://www.festra.com/wwwboard/messages/12948.htmlOBS: use o debugger para saber exatamente se o erro está na destruição do form ou antes de chegar nele.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 9, 2008 Autor Denunciar Share Postado Maio 9, 2008 Pelo debug o erro acontece na seguinte função: TObject.FreeInstance Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 9, 2008 Denunciar Share Postado Maio 9, 2008 Pelo debug o erro acontece na seguinte função: TObject.FreeInstanceExperimente de outra formatry if Form2 = Nil then Form2 := TForm2.Create(self); except ShowMessage('Erro na criação do formulário !!'); exit; end; Form2 .showmodal; Form2.Release;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 11, 2008 Denunciar Share Postado Maio 11, 2008 Result := False; v_Form := a_Arg.GetRAW(a_RawTagName); if Assigned(v_Form) then begin blu := Tblu.Create(nil); try TagToForm; if ShowModalDock(blu, f_Main) = mrOk then FormToTag; finally blu.Free; end; end;darth_ivan, por acaso o erro está ocorrendo neste "blu.Free"? Se sim, por acaso você escreveu o evento OnClose marcando o parâmetro Action := caFree;? Se for, poderia estar ai o problema.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 12, 2008 Autor Denunciar Share Postado Maio 12, 2008 Jhonas, não foi lançada nenhuma exceção quando o formulário foi criado. Micheus, não estou usando o event onClose, assim não estou setando esse parâmetro.Ta osso, ainda não solucionado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 12, 2008 Autor Denunciar Share Postado Maio 12, 2008 Uma informação que eu não falei para vocês é que esse bug não acontece sempre, ele acontece quando entro e saio desse form uma série de vezes seguidas, lá pela quarta ou quinta vez, o erro ocorre. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 12, 2008 Denunciar Share Postado Maio 12, 2008 OpaO que é este ShowModalDock?Voce passa como parametro o form criado e o form principal, não sei bem o que ele faz com os parametros...porem, na criacao do form voce não passa um owner pra ele e no ShowModalDock voce passa o form principal...Digo porque o Owner é o responsável por destruir tal elemento quando necessario, ou quando ele é destruido...Enfim como não da pra saber exatamente o que esse ShowModalDock faz, talvez não tenha haver...abrs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 14, 2008 Autor Denunciar Share Postado Maio 14, 2008 Ok, considerando o comentário do Churc, fiz o seguinte teste, criei o form filho passando com owner o form principal e então fiz a seguinte chamada...blu.ShowModalAconteceu o mesmo erro....Abraços... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 darth_ivan Postado Maio 14, 2008 Autor Denunciar Share Postado Maio 14, 2008 Caros,encontrei o erro. Ele estava em uma outra classe nada a ver com esse form em um upcast inválido. Esse delphi é maluco mesmo...Valeu galera... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 14, 2008 Denunciar Share Postado Maio 14, 2008 Pelo debug o erro acontece na seguinte função: TObject.FreeInstancedarth_ivan, este método é chamado na destruição de qualquer classe. Na verdade, durante a depuração, seria interessante que você pusesse um break-point no begin inícial desta procedure para que ao chegar a ela, você possa acessar a janela Call Stack e verificar os procedimentos anteriormente chamados. Assim, ao ocorrer o erro, você saberia com mais segurança, que procedimento está tentando utilizar este ponteiro inválido.mas, observando seus posts iniciais e a não solução pela abordagem do form, vamos explorar outras situações, pois podemos ter nos desviado do real causador do problema já que "Invalid pointer operation" se refere a operações com ponteiros e parece que você faz mais uso deles do que apenas no blu.free.Primeiramente seria interessante que você conseguisse apontar em que linha o erro ocorre, já que a execução do programa deve ser interrompida neste ponto ou muito próximo;Depois, temos outras questões a avaliar, como:- a_Arg, pode em algum momento ser um endereço de memória inválido? Quando ele é iniciado e quando é finalizado?- em que momento você insere algo nesta suposta lista (a_Arg) e em que momento você o remove? Como está removendo? Haveria a possibilidade de este item sendo buscado ter ficado na lista após sua eliminação?- uma vez que é verificada sua validade, este v_Form é utilizado em algum momento no TagToForm, FormToTag ou no ShowModalDock?- como está a codificação nestes procedimentos TagToForm e FormToTag?Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 14, 2008 Denunciar Share Postado Maio 14, 2008 Ele estava em uma outra classe nada a ver com esse form em um upcast inválido. Esse delphi é maluco mesmo...opa... demorei escrevento o post e agora vi que você já encontrou o problema. :blush: No geral, quando uma exceção ocorre e o fluxo do programa é desviado para dentro do editor, você pode usar o F7 para avançar na execução apenas um passo e então, utilizar a janela Call Stack para saber que procedimentos foram executados até o erro (pilha das chamadas) e também fazer uso da janela Watch para visualizar valores das variáveis.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
darth_ivan
Pessoal,
algum de vocês já se deparou com esse erro ao destruir um formulário?
Valeu...
Link para o comentário
Compartilhar em outros sites
15 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.