Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Gaspar

Aplicação após fechada, continua rodando

Recommended Posts

A minha aplicação, quando rodo no compilador mesmo, fecha normalmente quando fecho alguma janela mas quando rodo fora do compilador (no executável) continua rodando após a janela fechada. A aplicação continua rodando e daí tenho que finalizar o processo. O que pode-se fazer pra liberar da memória?

Compartilhar este post


Link para o post
Compartilhar em outros sites

use Application.Free;

 

outra que você pode fazer é, no evento OnClose do seu formulário adicionar a seguinte linha (no final, caso exista algum código nesse evento):

 

action:=cafree;

 

ele diz para o formulário que sua ação ao receber o comando close; é se fechar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, a minha aplicação possui vários forms sendo o form1 o principal e os outros estão "available" para serem criados. O problema é o seguinte:

Quando eu quero fechar a aplicação toda no form10 por exemplo, clicaria no X e pronto. Para isso eu colocaria no evento ONCLOSE Form1.Close; e Action := CaFree;

Assim o Formulário principal será fechado e o form atual também, pelo caFree. Até aqui sem problemas.

Mas se eu quero ir do form10 para o form11, no evento on close eu não posso ter Form1.Close; senão minha aplicação fecha!

Tem como diferenciar o X do formulario que também vai para o ONCLOSE, como um ONCLOSE(X) do etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está codificando as chamadas de um form para o outro? Você não usa o showmodal em cada form?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu costumo usar aplicações onde tenho um form principal com um TMainMenu (se não me falha a memória) e nele eu coloco uma entrada de menu para cada form da aplicação... no menu, eu codifico a chamada assim (considerando que não é uma aplicação com forms mdi).

 

try
    Formx := TFormx.Create(Application);
    Formx.showmodal;
finally
    FreeAndNil(Formx);
end;

Isso faz o seguinte: quando seleciono o menu, disparo a tela com o form que quero trabalhar e faço tudo o que preciso nele... quando eu dou o close do formx, eu não mando fechar o formy como você, mas o próprio formx. O comando após o finally vai cuidar de liberar a memória alocada para o form criado... não entendi só o porque de você abrir um form e nele mandar fechar outro form...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo!! Valeu...

Mas então, no caso de abrir um form e fechar outro, vamos supor, quero ir do form4 pro form5, Formx sendo o form5 e formy sendo form4. Quando eu dou um "next" pro 5, abre o Form5 e fecha o 4.

Eu testei alguns comandos com um certo número de forms e num certo form que abre, dá uma mensagem de erro falando de memória.

No que você me mandou deu certo mas ainda vou testar com o mesmo método em mais forms e vamos ver se dá certo.

Eu posto o resultado quando eu implementar mais.

Obrigado mais uma vez!

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas por qual motivo você fecha o form anterior quando vai para outro form? Se por este código que coloquei no botão que chama o outro form, ele também funciona... e o showmodal impede o usuário de clicar no form que chamou o novo form, pois o form criado está com o foco da aplicação... assim eu posso fazer a navegação ir do formx pro formy e depois pro formz (considerando que o x chama o y que chama o z) e, ao fechar o formz, voltar pro formy e só após fechar o formy eu voltar para o formx, sacou?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu estou desenvolvendo software educativo e os forms são constituídos de histórias, por isso que vou abrindo os forms e fechando os passados.

No showmodal que você me passou, ele funciona só que quando arrasto o form, fica aparecendo o form anterior na tela só que não é possível acessá-lo. Testei somente com show mas quando vou para o form2, a aplicação fecha(por causa do OnClose) mas continua rodando.

Você sabe me dizer algum comando que faça o "mesmo" trabalho do showmodal aparecendo só o form que estarei utilizando sem nada por trás?

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso, uma vez que chame o próximo form você não precisa mais voltar ao anterior? Pode postar um algoritmo com a lógica do programa que está desenvolvendo ou um exemplo com imagens do que deseja fazer pra ajudar a clarear?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://www.di.falm.edu.br/gied/index.php?option=com_content&view=article&id=57:objetos&catid=53:objetos&Itemid=74

Pode abrir qualquer um desses do GIED, são todos a mesma lógica.

 

Se tiver uma melhor solução de como poderia implementar os forms com os comandos e liberando da memória, agradeço.

Abraço.

 

NNa verdade, eu usaria os componentes da tms software para isso..ou ainda o Flash..abços..boa sorte..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.