Ir para conteúdo
Fórum Script Brasil
  • 0

Fechar Formulario Da Memoria


Arckyz

Pergunta

Ola, estou com um problema no meu sistema tem o botao voltar

ele esta assim:

frm1.show;

frm2.hide;

mas eu não quero o hide.. porque o hide deixa na memoria o form.. eu quero que ele feche e saia da memoria...

no visual basic seria frm2.unload mais não possui isso no delphi.. como eu faço isso?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

faz assim, no Evento OnClose do Form2 você coloca

Action := caFree;

Pra achar esse evento se você não conhece muito delphi

clica no form, vai no Object Inspector em Events e procura

por OnClose...

ai você faz

frm1.show;

frm2.Close;

ele se limpará da memória, mas tem maneiras melhores

mas só funcionam com ShowModal...

fezli natal!

Link para o comentário
Compartilhar em outros sites

  • 0
POw cara fiquei testando e vi que com esse jeito não tem como da posteriormente o .show no form

eu preciso que o cara possa abrir dpois o form... mas ele precisa sair da memoria...

quadno da form1.show; da erro pela segunda vez..

como fazeR?

Digamos que retirar o form da memória e mostrar ele denovo, você tem que criá-lo novamente. Se não puder fazer isso não tem jeito.

você pode fazer:

retira o form2 do auto-create (em opções do projeto)

if not Assigned(form2) then
  form2 := TForm2.Create(Self);
form2.Show

lá no Destroy do Form2, você coloca (se for Delphi 7 ou superior)

FreeAndNil(form1);

e continua utilizando a dica do visitante: no OnClose do form2

Action := caFree;

Acho que é isso.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Fui desenvolvendo um sistema, até que chegou uma hora em que o micro

não suportava mais carregar o sistemas

não carrego mais os forms junto com a abertura do sistema

quando vou usar um crio ele em tempo de execução e depois

de utilizar tiro ele da memória

// Abre Agenda

Application.CreateForm(TAgenda,Agenda);

Agenda.ShowModal;

Agenda.Hide; Agenda.Free;

para tirar os forms entre em

project\options\forms tiro eles do auto create e passo eles para o availabre

menos os data modules e o form da tela princial

Link para o comentário
Compartilhar em outros sites

  • 0
Fui desenvolvendo um sistema, até que chegou uma hora em que o micro

não suportava mais carregar o sistemas

não carrego mais os forms junto com a abertura do sistema

quando vou usar um crio ele em tempo de execução e depois

de utilizar tiro ele da memória

// Abre Agenda

Application.CreateForm(TAgenda,Agenda);

Agenda.ShowModal;

Agenda.Hide; Agenda.Free;

para tirar os forms entre em

project\options\forms tiro eles do auto create e passo eles para o availabre

menos os data modules e o form da tela princial

Esses dois últimos comandos matam o formulário da memória? Eu tentei entender o que o Micheus disse logo acima mas não consegui achar o "destroy" do meu form (uso o Delphi 2007). Seria o OnDestroy?

Link para o comentário
Compartilhar em outros sites

  • 0

Alguém poderia me ajudar?

Situação:

Tenho 2 forms. O frmLogin (que é o Mainform) e o frmPrincipal. Quando o usuário consegue se logar, o frmPrincipal abre mas o frmLogin continua aberto. Quero fechá-lo mas já tentei de todas as maneiras e ele não fecha.

Meu código:

if not Assigned(UTelaInicial.frmPrincipal) then
      try
      begin
      frmPrincipal := TfrmPrincipal.Create(Self);
      frmPrincipal.ShowModal;
      end
      finally
      frmLogin.free;
      end;

Link para o comentário
Compartilhar em outros sites

  • 0
Alguém poderia me ajudar?

Situação:

Tenho 2 forms. O frmLogin (que é o Mainform) e o frmPrincipal. Quando o usuário consegue se logar, o frmPrincipal abre mas o frmLogin continua aberto. Quero fechá-lo mas já tentei de todas as maneiras e ele não fecha.

Meu código:

if not Assigned(UTelaInicial.frmPrincipal) then
      try
      begin
      frmPrincipal := TfrmPrincipal.Create(Self);
      frmPrincipal.ShowModal;
      end
      finally
      frmLogin.free;
      end;

Deixe o formulario frmPrincipal como MainForm e depois você cria o frmLogin a partir do principal, do jeito que você está fazendo ao fechar o frmLogin finalizará a Aplicação. O form principal sempre tem que estar ativo e ele chamará os outros.

Geralmente eu deixo o DataModule como principal e o evento onCreate do DM carrego todas as informações necessárias como parametros externos de um arq INI ou do Registro do Sistema, Dessa forma se houver algum problema no carregamento desses parametros Uso o Application.Terminate ou Halt para finalizar a aplicação antes da inicialização da mesma.

Só frizando o que você está tentando fazer com o seu código é livrar sua própria aplicação da memória, sendo o frmLogin o MainForm.

Link para o comentário
Compartilhar em outros sites

  • 0
:

:

// Abre Agenda

Application.CreateForm(TAgenda,Agenda);

Agenda.ShowModal;

Agenda.Hide; Agenda.Free;

:

Esses dois últimos comandos matam o formulário da memória?

Fuzileir0, apenas o Free provocaria este efeito, o hide apenas oculta o formulário o que neste caso seria desnecessário já que ele sumirá de qualquer modo. (neste post eu exemplifiquei os eventos que citei antes)

Entretanto, a documentação, mesmo eu tendo sugerido anteriormente o uso do FreeAndNil, que nada mais faz do que chamar o método Free do objeto em questão e o setar com nil, a documentação do Delphi é clara em frisar que para eliminar um objeto da classe TForm, o método a ser utilizado deveria ser o Release. Vou postar aqui o que está neste outro post:

Sugestão, troque:

FAcoes.Destroy; // destroy o formulario

por:

FAcoes.Release;

Motivos (do help):

Destroy destructor (TCustomForm)

Removes the form from memory.

Description

Do not call Destroy. Instead, call Release, which indirectly produces a call to the Free method, which in turn calls Destroy.

___________________________

Release method (TCustomForm)

Destroys the form and frees its associated memory.

Description

Use Release to destroy the form and free its associated memory.

Free method (TObject)

...

To free a form, call its Release method, which destroys the form and releases the memory allocated for it after all its event handlers and those of the components it contains are through executing.

*Informe se não conseguir ler o texto ;)

Eu tentei entender o que o Micheus disse logo acima mas não consegui achar o "destroy" do meu form (uso o Delphi 2007). Seria o OnDestroy?
Sim. O "destroy" que eu citei seria realmente o evento OnDestry.

Deixe o formulario frmPrincipal como MainForm e depois você cria o frmLogin a partir do principal, do jeito que você está fazendo ao fechar o frmLogin finalizará a Aplicação. O form principal sempre tem que estar ativo e ele chamará os outros.
Só melhorando a explicação. O primeiro form criado (adicionado à Application) será sempre o form principal e o seu fechamento implica no encerramento do programa.

Há a possibilidade de você executar um form de login e apenas se o login for aceito é que a sua aplicação continua e é iniciada. Veja um exemplo neste post.

Geralmente eu deixo o DataModule como principal
Eder Moraes, acho que aqui você quis dizer que coloca o DataModule como primeiro na ordem de criação dos formulários do projeto, não é?! Nas opções do projeto, apenas forms podem ser selecionados em MainForm. Ou você usa algum artifício?

Abraços

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...