Arckyz Postado Dezembro 24, 2006 Denunciar Share Postado Dezembro 24, 2006 Ola, estou com um problema no meu sistema tem o botao voltarele 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Dezembro 24, 2006 Denunciar Share Postado Dezembro 24, 2006 faz assim, no Evento OnClose do Form2 você colocaAction := caFree;Pra achar esse evento se você não conhece muito delphiclica no form, vai no Object Inspector em Events e procurapor OnClose...ai você fazfrm1.show;frm2.Close;ele se limpará da memória, mas tem maneiras melhoresmas só funcionam com ShowModal...fezli natal! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Arckyz Postado Dezembro 24, 2006 Autor Denunciar Share Postado Dezembro 24, 2006 POw cara fiquei testando e vi que com esse jeito não tem como da posteriormente o .show no formeu 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 25, 2006 Denunciar Share Postado Dezembro 25, 2006 POw cara fiquei testando e vi que com esse jeito não tem como da posteriormente o .show no formeu 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.Showlá no Destroy do Form2, você coloca (se for Delphi 7 ou superior)FreeAndNil(form1);e continua utilizando a dica do visitante: no OnClose do form2Action := caFree;Acho que é isso.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ADB Sistemas Postado Janeiro 17, 2007 Denunciar Share Postado Janeiro 17, 2007 Fui desenvolvendo um sistema, até que chegou uma hora em que o micronão suportava mais carregar o sistemasnão carrego mais os forms junto com a abertura do sistemaquando vou usar um crio ele em tempo de execução e depoisde utilizar tiro ele da memória // Abre Agenda Application.CreateForm(TAgenda,Agenda); Agenda.ShowModal; Agenda.Hide; Agenda.Free;para tirar os forms entre emproject\options\forms tiro eles do auto create e passo eles para o availabremenos os data modules e o form da tela princial Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fuzileir0 Postado Abril 19, 2009 Denunciar Share Postado Abril 19, 2009 Fui desenvolvendo um sistema, até que chegou uma hora em que o micronão suportava mais carregar o sistemasnão carrego mais os forms junto com a abertura do sistemaquando vou usar um crio ele em tempo de execução e depoisde utilizar tiro ele da memória // Abre Agenda Application.CreateForm(TAgenda,Agenda); Agenda.ShowModal; Agenda.Hide; Agenda.Free;para tirar os forms entre emproject\options\forms tiro eles do auto create e passo eles para o availabremenos os data modules e o form da tela princialEsses 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fuzileir0 Postado Abril 19, 2009 Denunciar Share Postado Abril 19, 2009 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Moraes Postado Abril 20, 2009 Denunciar Share Postado Abril 20, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 20, 2009 Denunciar Share Postado Abril 20, 2009 :: // 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 formulariopor: FAcoes.Release;Motivos (do help):Destroy destructor (TCustomForm)Removes the form from memory.DescriptionDo 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.DescriptionUse 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 principalEder 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Arckyz
Ola, estou com um problema no meu sistema tem o botao voltar
ele esta assim:
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
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.