Ir para conteúdo

POWERED BY:

Arquivado

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

Spoock

[Resolvido] Como destruir Form corretamente?

Recommended Posts

Olá novamente Galera do iMasters! Estou aqui de novo e com uma nova duvida, estou a muito tempo fazendo aplicação utilizando a função Hide nos formulários que não quero mais utilizar nas aplicações, mas ocorrem vários problemas utilizando isso. O primeiro deles é que o formulário quando recebe a função Hide continua operante, o segundo problema é que a aplicação some da barra de tarefas do "Ruindows" e o terceiro problema é que se eu não declarar no evento OnClose de todos os formulários da aplicação para esse form que está oculto ser fechado também, ele irá continuar aberto e consumindo memória da maquina.

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
a: integer;
begin
// Coleta os dados do banco-de-dados.mdb e confere para ver se são iguais aos digitados
if (DataModule1.ADOTable1.Locate('Usuario',Edit1.Text,[loCaseInsensitive])) and (DataModule1.ADOTable1.Locate('Senha',Edit2.Text,[loCaseInsensitive])) then
// Se forem iguais:
Begin
Application.MessageBox('Você possuí permissão para acessar o Painel de Controle. Bem Vindo!' ,'Sucesso', mb_iconinformation + mb_ok);
Form2.Show;
Form1.Hide;
End
//
Else
// Se não forem iguais
Begin
Application.MessageBox('Nome de Usuário e/ou Senha incorreto(s)!' ,'Atenção', mb_iconexclamation + mb_ok);
End;
//
end;

 

Alguém tem ideia de como eu posso resolver este meu grande e incomodo problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma forma seria usar o método ShowModal. Como o ShowModal retorna um valor que pode ser determinado pelo ModalResult do formulário, o sistema não pulará para a próxima linha enquanto o formulário não for fechado ou não for definido um valor para o ModalResult.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom bdexterholland, usei o ShowModal e ele me permitiu destruir o Formulário e depois abrir o Form2. Dois dos problemas resolvidos, só que um ainda não foi, o programa ainda continua fora da barra de tarefas. Quando o Form1 é destruído e o Form2 é exibido, automaticamente a aplicação some da barra de tarefas, tem alguma ideia do que está acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O botão que aparece na barra de tarefas é relativo ao 1º formulário no seu arquivo .dpr. Pelo que deu para perceber, você tentou criar uma janela de login. Bom, vou postar como fiz para criar minha janela de login, lembrando que estes códigos foram colocados no meu arquivo .dpr:

 

begin
 Application.Initialize;
 Application.Title := 'Sistema de Gestão de Locadora';
 Application.CreateForm(Tfrm_Principal, frm_Principal); //Esta é a janela que terá um botão na barra de tarefas.
 Application.CreateForm(Tfrm_ConexaoBaseDados, frm_ConexaoBaseDados);
 //Um punhado de Application.CreateForm, um para cada formulário do projeto... ...bla bla bla...
 Application.CreateForm(Tfrm_Extorno, frm_Extorno);

 {Este if é só para caso o operador quiser configurar a conexão
  sem ter que logar no sistema ou mesmo conectar abase dedados}
 if (UpperCase(paramStr(1)) = '/CONFIG') then  
   frm_ConexaoBaseDados.ShowModal;

 //Este if é uma gambiarra que me auxilia a debugar a budega...
 DebugMode := UpperCase(paramStr(1)) = '/DEBUG';

 Application.CreateForm(Tfrm_CadastraMidia, frm_CadastraMidia);
 //Mais alguns Application.CreateFrom...
 Application.CreateForm(Tfrm_Login, frm_Login);

 dm.Conectar;
 frm_Configuracoes.BuscaConfiguracoesDaBase;

 {Quando o usuário clica em OK da janela de login os dados são aceitos,
  então, eu atribo 1 (hum) a propriedade ModalResult do form de login,
  Assim, o sistema irá mostrar a janela de login antes da janela principal
  e se caso ele não fizer o login, a aplicação é finalizada sem mostrar
  a janela principal}
 if (frm_Login.ShowModal = 1) then 
   Application.Run;
end.

 

Eu entendo isto como uma gambiarra, mas funciona legal...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido, simplesmente a Mula aqui, no caso sou eu, colocou como Form Principal do projeto como o Formulário de Login, e deixei o Verdadeiro Form Principal como form secundário, ou seja, o programa rodava o form de login, no caso o primeiro que se abria e depois escondia o form principal e rodava o secundário. Mas valeu bdexterholland!

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.