ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[Resolvido] Problema no onclose
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Sex Jul 29, 2011 3:10 pm    Assunto: [Resolvido] Problema no onclose Responder com Citação

Opa,
Por algum motivo quando dou um freeandnill no evento onclose de um formulário ele minimiza o formulario pai depois de fechar.

Ex:
Código:

procedure TfrmAcCadAuxiliar.FormClose(Sender: TObject;
  var Action: TCloseAction);
var I : Integer;
begin
   for I := 0 to comboMarca.Items.Count - 1 do
        TComboMarca(comboMarca.Items.Objects[I]).Free;

   comboMarca.Clear;
   FreeAndNil(frmAcCadAuxiliar);
end;

Depois de fechar ele minimiza o pai (form que chamou ele), algem tem uma solução??
_________________
Jesus loves you!


Editado pela última vez por rafacauly em Qui Ago 04, 2011 11:05 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sex Jul 29, 2011 4:40 pm    Assunto: Responder com Citação

pq vc usa esse freeandnil?


pq vc não seta o action pra cafree?

ele ta no onclose e se ele tiver q fazer qq coisa dps q fechar?


se ele tiver sido aberto com showmodal estaria executando o seguinte código:

Código:
       repeat
          Application.HandleMessage;
          if Application.Terminated then ModalResult := mrCancel else
            if ModalResult <> 0 then CloseModal;
            //aki ele teria sido destruido no caso
        until ModalResult <> 0;//ta querendo acessar o ModalResult
        Result := ModalResult;//de novo. nao daria erro aki pq ja tinha dado em cima.
        SendMessage(Handle, CM_DEACTIVATE, 0, 0);
       ...
       ...
      finally
        Hide; //por causa do finally outro
      end;
    finally
       ...
       ...
      Exclude(FFormState, fsModal);e; //por causa de outro finally outro erro
    end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Sex Jul 29, 2011 4:50 pm    Assunto: Responder com Citação

Como ele é aberto:
Código:

  if frmAcCadAuxiliar = Nil then
      frmAcCadAuxiliar := TfrmAcCadAuxiliar.Create(frmAcPrincipal);

  frmAcCadAuxiliar.Show;

Mudou nada o caFree...
_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Seg Ago 01, 2011 10:30 am    Assunto: Responder com Citação

não mudou pq vc colocou ele e não tirou o resto
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Seg Ago 01, 2011 2:01 pm    Assunto: Responder com Citação

Desculpa, mas que resto?
Tirei o FreeAndNil e botei o action := caFree e continua minimizando, além de causar erro de acces violation
_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Seg Ago 01, 2011 7:20 pm    Assunto: Responder com Citação

o prob do accesviolation ta aki


Código:
for I := 0 to comboMarca.Items.Count - 1 do
        TComboMarca(comboMarca.Items.Objects[I]).Free;


tente assim:

Código:

try
   for I := comboMarca.Items.Count - 1 downto 0 do
        TComboMarca(comboMarca.Items.Objects[I]).Free;
except
   ShowMessage('Erro q eu não sabia q dava');
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Seg Ago 01, 2011 8:56 pm    Assunto: Responder com Citação

Amigo vc somente pode liberar objetos neste caso, se vc der um freeandnil dará problemas mesmo, neste caso é free.


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Ter Ago 02, 2011 8:38 am    Assunto: Responder com Citação

Amigo rafacauly , vc esta liberando um form dentro de um dos seus eventos

Citação:
procedure TfrmAcCadAuxiliar.FormClose(Sender: TObject;
var Action: TCloseAction);
var I : Integer;
begin
for I := 0 to comboMarca.Items.Count - 1 do
TComboMarca(comboMarca.Items.Objects[I]).Free;

comboMarca.Clear;
FreeAndNil(frmAcCadAuxiliar);
end;


No meu entendimento falta mais informações importantes ..
1)Vc esta utilizando MDI ou SDI ???
2)Esse formulário esta no Avalaible forms ???
3)Quem esta instanciando este form ???

Com tudo quero deixar minha opinião sobre o Release .. Na grande maioria dos casos o release é o procedimento indicado quando se quer destruir um form quando ainda estiver processando um dos seus eventos. Não que vá funcionar para o seu caso , pois no meu entendimento depende de sua arquitetura .
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Ter Ago 02, 2011 11:07 am    Assunto: Responder com Citação

Citação:

1)Vc esta utilizando MDI ou SDI ???
2)Esse formulário esta no Avalaible forms ???
3)Quem esta instanciando este form ???

1 - SDI.
2 - Sim.
3 - o Formulário Principal, que é criado automaticamente

Agradeço as respostas de todos mas ainda não consegui arrumar...
O erro de acces violation era que o caFree nao setava como nil minha variavel. Mesmo arrumando o caFree continua minimizando...

Uma coisa que esqueci de mencionar: O formulario pai só é minimizado quando o filho chama alguma outra coisa. Ex: se o filho solta um messageBox ou chama outro form, dai o pai é minimizado. Se o filho nao abre um form ou dialog ele fecha normalmente...
_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Ter Ago 02, 2011 12:40 pm    Assunto: Responder com Citação

hummm . SE vc utiliza SDI não tem que destruit nada no Onclose , nen tampouco utilizar cafree ???

Geralmente é assim

Cria
Apresenta
Libera memoria

Como vc esta instanciando este form ???
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Ter Ago 02, 2011 12:50 pm    Assunto: Responder com Citação

rafacauly escreveu:
Como ele é aberto:
Código:

  if frmAcCadAuxiliar = Nil then
      frmAcCadAuxiliar := TfrmAcCadAuxiliar.Create(frmAcPrincipal);

  frmAcCadAuxiliar.Show;

Mudou nada o caFree...

_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Ter Ago 02, 2011 2:07 pm    Assunto: Responder com Citação

rafacauly escreveu:
rafacauly escreveu:
Como ele é aberto:
Código:

  if frmAcCadAuxiliar = Nil then
      [b]frmAcCadAuxiliar[/b] := TfrmAcCadAuxiliar.Create([b]frmAcPrincipal[/b]);

  frmAcCadAuxiliar.Show;

Mudou nada o caFree...


amigo , olhando o seu código vc esta atribbuindo como proprietário do
Form frmAcCadAuxiliar , ele mesmo frmAcCadAuxiliar

Use o self como proprietário

e colocoue o cafree no onclose ou release

para criar

if frmAcCadAuxiliar = Nil then
frmAcCadAuxiliar := TfrmAcCadAuxiliar.Create(self)
frmAcCadAuxiliar.Show;

No Onclose .. coloque

Action:=cafree; e/ou

self.release;
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Ter Ago 02, 2011 2:51 pm    Assunto: Responder com Citação

o Propietário é o frmAcPrincipal, mas mesmo fazendo as respectivas alterações continua minimizando...

Citação:

Uma coisa que esqueci de mencionar: O formulario pai só é minimizado quando o filho chama alguma outra coisa. Ex: se o filho solta um messageBox ou chama outro form, dai o pai é minimizado. Se o filho nao abre um form ou dialog ele fecha normalmente..


Nao tem alguma coisa aver com isso???
_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Ago 02, 2011 3:07 pm    Assunto: Responder com Citação

Eu faço assim para criar forms SDI

Fom1 principal, form2 secundario



Não utilizo a propriedade onClose do form2 para nada, fica tudo na chamada do form1 (principal)
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafacauly
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 30 de Setembro de 2010
Mensagens: 194

MensagemEnviada: Ter Ago 02, 2011 3:33 pm    Assunto: Responder com Citação

Entendi, dei uma pesquisada e vi que meus conceitos de MDI e SDI estavam equivocados, realmente eu abro alguns forms em SDI do mesmo jeito do exemplo do Adriano. Mas no meu exemplo que da o erro não faço o showmodal e nem uso MDI. Tem outro jeito de fazer isso funcionar sem ser com MDI ou SDI??
_________________
Jesus loves you!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB