Delphi

9 respostas Resolvido
I

boa tarde, tenho uma aplicação em delphi que envia email, quando a açao de enviar email e chamada eu dou um show em um form, uma telinha chamada aguarde com efeito visual que fica ativa por 3 segundos, porem quando essa tela e aberta o codigo de enviar email fica congelado e so volta a funcionar quando esse form aguarde e fechado, tem algum forma de fazer com que o codigo continue sendo executado mesmo com esse forme aberto?

9 Respostas

T

Como você está exibindo o form? Está usando Showmodal ou somente Show?

Se fizer ShowModal, a execução fica parada enquanto o form é exibido. Tente usar Show, e um timer no form de “Aguarde” para fechá-lo após X segundos.

Outra opção é usar uma thread para mandar o email ou exibir o form, assim seu código não fica travado nesse trecho.

Abraço.

I

entao estou usando o showModal, pq se uso o show a label contida no form aguarde nao fica visivel…
ouvi falar sobre thread porem n tenho uma minima noção de como usar…
O programa tem o seguinte funcionamento, de inicio abre a tela de login, nessa tela tem uma opçao esqueci minha senha, ao clicar pede o nome de usuario, faz uma consulta no banco e envia um email a esse respectivo usuario, enquanto esta enviando quero abrir esse form de aguarde e que ele feche ao terminar a ação sem interromper a mesma.

T

A solução mais simples seria com Show mesmo. Esse Label, você está alterando o texto dele de alguma forma? Ou é um texto estático, que já está configurado quando o form é aberto?

Abraço.

I

então uma parte da label é estatica, a frase ‘aguarde’, porem existem mais 3 labels que seriam as reticencias, 3 pontos ‘…’ cada ponto é uma label , cada uma é acionada por um timer causando um efeito visual que faz os ponto ‘piscarem’ , apenas para efeito visual.

T

O envio de email que ocorre depois do Show deve estar congelando esse Timer, já que aparentemente é um processo bloqueante, por isso as reticências não funcionam bem.

Não é o ideal, mas teste colocar Application.ProcessMessages dentro do método do timer que atualiza o Label. Isso fará com que o programa processe mensagens pendentes, como a atualização do Label.

Abraço.

I

fiz o que disse, mas infelizmente ainda nao deu terço, a tela aparece em ‘branco’ da mesma forma, a label ‘aguarde’ que e estatica tambem nao fica visivel

T
Solucao aceita

Então o envio do email é bloqueante mesmo. Acredito que threads seriam um caminho, assim o envio de email ficaria em uma thread paralela e o sistema não congelaria por completo.

Não é tão complicado quanto parece. Dê uma olhada em:

Abraço.

I

poxa valeu mesmo esta me ajudando muitoo, vou estudar o conteudo que me mandou, obrigado mesmo, abraços

I

atualizando o post, se eu usar um Application.ProcessMessages; depois de chamar o formAguarde fez as labels ficarem visiveis, porem sem o efeito visual delas piscarem, meu professor disse que eu teria de usar threads mesmo pra ter o efeito visual, mas com essa ‘gambiarra’ ja deu uma bela ajudada, obriagado pela ajuda

Criado 17 de setembro de 2017
Ultima resposta 19 de set. de 2017
Respostas 9
Participantes 2