Tela Mensagem Inatividade

Estou com um problema que muitos usuários deixam uma tela customizada aberta o dia inteiro desnecessariamente, e como esta tela possui uma funcionalidade de auto-atualização, então o processo padrão do sistema que controla a inatividade não funciona.

Eu queria colocar um timer para fechar forçadamente esta tela, já consegui fazer isso. Queria uma melhoria no sentido de fechar o processo liberar a licença, porém ainda assim deixando uma mensagem para o usuário (como ocorre com o processo padrão de timeout, onde ele fecha mas deixa uma mensagem dizendo que fechou). Seria possível fazer isso? Hoje estou usando a função Final() com um timer 10s, porém ela mostra a mensagem e depois fecha tudo sem deixar vestígios de nada.

Cirilo,

Existem algumas opções que você pode tentar fazer, mas não sei dizer se o resultado seria o esperado, seria necessário implementar e fazer os testes, abaixo algumas ideias/sugestões:

  • Desativar a auto-atualização conforme esse timer que você implementou, com isso o timeout padrão do binário entraria em ação, você poderia deixar uma mensagem em tela informado que a auto-atualização foi desativada, para que caso o usuário volte para o sistema, veja que será necessário reabrir a rotina.
    • Antes de utilizar a função final, fechar o ambiente, utilizando RpcClearEnv, encerrando as conexões com o banco via TCUnLink, talvez isso libere as licenças, porém não tenho certeza, pois normalmente ela fica junto a thread, seria implementar e verificar o resultado junto ao monitor do LS.
    • Manter a lógica do Timer e do encerramento com a função Final, porém criar uma outra função que exibiria a mensagem sobre o encerramento, essa função seria chamada antes do Final, mas via SmartClient e linha de comando, usando WinExec ou ShellExecute por exemplo.
    • Gerar uma exceção, talvez fechando o ambiente antes como teste, mas gerar uma exceção via UserException e verificar como ficará a questão do consumo de licenças.

Espero que alguma das opções resulte num cenário positivo.

Mais uma vez muito obrigado pelo apoio, sempre com respostas excelentes. Estou usando mesmo a sua primeira ideia. Perguntei porque poderia haver alguma função padrão que pudesse deixar uma mensagem mesmo com a thread fechada.