Terminar aplicação no código do .dpr
Pessoal estou usando o método [b:31ee1af4d4]Terminate[/b:31ee1af4d4] do objeto [b:31ee1af4d4]Application[/b:31ee1af4d4] antes de criar o formulário principal e alguns outros DataModules, porém o sistema está travando, pensei em utilizar o [b:31ee1af4d4]Halt(0)[/b:31ee1af4d4] mas não me livrou do problema... algum conselho?
Bruno Belchior
Curtidas 0
Respostas
Massuda
14/02/2006
No DPR, basta não executar o Application.Run ou simplesmente sair com Exit.
Use Application.Terminate de ´dentro´ do programa, depois que Application.Run é chamado, mas ainda não retornou.
Use Application.Terminate de ´dentro´ do programa, depois que Application.Run é chamado, mas ainda não retornou.
GOSTEI 0
Bruno Belchior
14/02/2006
Eu usei o Application.Terminate mas antes do Run... Quer dizer que não funciona?
GOSTEI 0
Massuda
14/02/2006
[quote:3f16d9c4bd=´Bruno Belchior´]Quer dizer que não funciona?[/quote:3f16d9c4bd]Fiz alguns testes e pelo que vi, deveria funcionar (embora eu prefira simplesmente não executar o Application.Run).
Qual é o código no seu DPR?
Qual é o código no seu DPR?
GOSTEI 0
Michael
14/02/2006
[quote:328e429794=´Bruno Belchior´]Eu usei o Application.Terminate mas antes do Run... Quer dizer que não funciona?[/quote:328e429794]
O método [b:328e429794]Run [/b:328e429794]do objeto [b:328e429794]Application [/b:328e429794]inicia o loop de mensagens da aplicação. Se vc não quer que o aplicativo inicie, é melhor, como o [b:328e429794]Massuda [/b:328e429794]sugeriu, simplesmente não chamar a rotina, pois vc estará economizando processamento. Sem chamar [b:328e429794]Run[/b:328e429794], a aplicação não inicia propriamente dita.
Já fiz isso uma vez e meu código foi mais ou menos assim:
[]´s
O método [b:328e429794]Run [/b:328e429794]do objeto [b:328e429794]Application [/b:328e429794]inicia o loop de mensagens da aplicação. Se vc não quer que o aplicativo inicie, é melhor, como o [b:328e429794]Massuda [/b:328e429794]sugeriu, simplesmente não chamar a rotina, pois vc estará economizando processamento. Sem chamar [b:328e429794]Run[/b:328e429794], a aplicação não inicia propriamente dita.
Já fiz isso uma vez e meu código foi mais ou menos assim:
if AlgumaCoisaQueBloqueieOInicioDaAplicacao then ... else begin Application.Initialize; ... Application.Run; end;
[]´s
GOSTEI 0
Bruno Belchior
14/02/2006
A questão é que tenho um componente de auditoria na minha aplicação (semelhante ao TUserControl), então quando crio o DataModule onde o componente (não visual) está contido, o formulário de auditoria aparece, digitando corretamente a senha e usuário tudo volta ao normal, mas se o usuário cancelar o login a aplicação deve fechar, então chamo Application.Terminate, mas como não chamei Application.Run então esta travando a aplicação...
Application.Initialize; // Na Linha abaixo é chamado o FrmLogin... Application.CreateForm(TDtMdlAuditoriaEscolar, DtMdlAuditoriaEscolar); Application.CreateForm(TFrmPrincipal, FrmPrincipal); Application.Run;
GOSTEI 0
Massuda
14/02/2006
Pelo que testei, o problema é que seu programa está criando o form principal e provavelmente o form não deve funcionar corretamente no caso do usuário não estar autorizado a utilizar o programa.
Uma alternativa seria ter algo no DtMdlAuditoriaEscolar que indique se o login do usuário foi ou não aceito e assim criar ou não o form principal do programa e dar o Application.Run (isso tem a vantagem de evitar que o form principal pisque na tela).
Uma alternativa seria ter algo no DtMdlAuditoriaEscolar que indique se o login do usuário foi ou não aceito e assim criar ou não o form principal do programa e dar o Application.Run (isso tem a vantagem de evitar que o form principal pisque na tela).
GOSTEI 0
Bruno Belchior
14/02/2006
Mesmo tendo dado um Application.Terminate do DtmdlAuditoria quando vou conferir com a propriedade Terminated ela me retorna False...
if Application.Terminated = False the Application.Run; // Sempre entra aqui...
GOSTEI 0
Massuda
14/02/2006
[quote:6f8b35e2bf=´Bruno Belchior´]...quando vou conferir com a propriedade Terminated ela me retorna False...[/quote:6f8b35e2bf]Application.Terminated tem seu valor alterado pelo loop de mensagens do programa, que é iniciado quando você executa Application.Run; logo, no momento que você está testando, Application.Terminated está com o valor default, que é False.
GOSTEI 0