Terminar aplicação no código do .dpr

14/02/2006

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

Respostas

14/02/2006

Massuda

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.


Responder Citar

15/02/2006

Bruno Belchior

Eu usei o Application.Terminate mas antes do Run... Quer dizer que não funciona?


Responder Citar

15/02/2006

Massuda

[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?


Responder Citar

15/02/2006

Michael

[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:

if AlgumaCoisaQueBloqueieOInicioDaAplicacao then
...
else
begin
  Application.Initialize;
  ...
  Application.Run;
end;


[]´s


Responder Citar

15/02/2006

Bruno Belchior

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;



Responder Citar

15/02/2006

Massuda

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).


Responder Citar

15/02/2006

Bruno Belchior

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...



Responder Citar

15/02/2006

Massuda

[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.


Responder Citar