Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Sex Jul 29, 2011 3:10 pm Assunto: [Resolvido] Problema no onclose |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Jul 29, 2011 4:40 pm Assunto: |
|
|
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 |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Sex Jul 29, 2011 4:50 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Ago 01, 2011 10:30 am Assunto: |
|
|
não mudou pq vc colocou ele e não tirou o resto |
|
Voltar ao Topo |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Seg Ago 01, 2011 2:01 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Ago 01, 2011 7:20 pm Assunto: |
|
|
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 |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Ago 01, 2011 8:56 pm Assunto: |
|
|
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 |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Ter Ago 02, 2011 8:38 am Assunto: |
|
|
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 |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Ter Ago 02, 2011 11:07 am Assunto: |
|
|
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 |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Ter Ago 02, 2011 12:40 pm Assunto: |
|
|
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 |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Ter Ago 02, 2011 12:50 pm Assunto: |
|
|
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 |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Ter Ago 02, 2011 2:07 pm Assunto: |
|
|
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 |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Ter Ago 02, 2011 2:51 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
rafacauly Aprendiz

Registrado: Quinta-Feira, 30 de Setembro de 2010 Mensagens: 194
|
Enviada: Ter Ago 02, 2011 3:33 pm Assunto: |
|
|
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 |
|
 |
|