Bonjour tout le monde![]()
J'ai cr�e une petite fen�tre qui se lance lorsque l'utilisateur clique sur un bouton afin d'envoyer un email, avec un fichier en pi�ce jointe.
Cette fen�tre a pour but de faire patienter l'utilisateur : affichage de la progression du traitement de l'envoi de l'email. J'utilise pour cela le composant TCGauge (onglets Samples), car il me permet d'afficher la progression en % .
Je pense que la Progress Bar aurait �galement fait l'affaire.
Pour envoyer l'email j'utilise le composant TIdSMTP (onglets Indy Clients).
Mon probleme est le suivant : l'email arrive bien a destination ainsi que sa pi�ce jointe, j'arrive � faire progresser ma barre en temps r�el, mais pas de mani�re proportionnelle !
Je m'explique : le but du jeu est d'afficher je pense dans ma jauge de progression, l'�tat � un instant T du nombre d'octets envoy�s.
Sur le composant TIdSMTP , il existe 3 �v�nements :
- OnWorkBegin : appel� d�s que j'envoie l'email
- OnWork : appel� � plusieurs reprises lors du traitement d'envoi d'email
- OnWorkEnd : lorsque l'envoi est termin�
J'ai donc eu l'id�e de mesurer avant d'envoyer un email, la taille en octets du fichier joint.
Je recup�re cette taille, et j'affecte donc � ma jauge sur le WorkBegin, la valeur maximum, en positionnant la valeur de d�part � 0
A noter que la valeur "AWorkCountMax" pass�e en param�tre me renvoie 0, donc je ne vois pas trop a quoi celle-ci peut me servir ... Pourtant dans l'aide cette variable est cens�e repr�senter le nombre d'octets qui vont �tre envoy�s.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 void __fastcall TfrmEnvoiEmail::SMTPConnecWorkBegin(TObject *Sender, TWorkMode AWorkMode, const int AWorkCountMax) { cggeProgress->Progress = 0; cggeProgress->MaxValue = TailleFicJoint; }
Sur le Work, j'actualise ma barre de la sorte (et c'est ici que je n�cessite votre aide)
Cette incr�mentation est totalement arbitraire, je pense qu'il faut que j'utilise la valeur AWorkCount qui devrait me renvoyer le nombre d'octets d�ja envoy�s � cet instant T.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 void __fastcall TfrmEnvoiEmail::SMTPConnecWork(TObject *Sender, TWorkMode AWorkMode, const int AWorkCount) { cggeProgress->Progress += cggeProgress->MaxValue*0.01; }
Le probl�me c'est que vers la fin de l'envoi, cette valeur est SUPERIEURE � la taille en octet de mon fichier joint. Je pense que ceci est normal, puisqu"il y a �galement les informations comme le corps du message, l'adresse expediteur, l'adresse destinataire etc ...
Alors comment faire pour calculer �quitablement et proportionnellement la progression de l'envoi ? Comment connaitre � l'avance le nombre d'octets TOTAL qui vont �tre envoy�s ? (j'ai d�ja la taille du fichier, comment recup�rer la taille des informations "textes" de l'email ...) ??
Sur le WorkEnd, bien s�r je fais :
Si quelqu'un a d�ja �t� confront� � cette probl�matique, je suis preneur
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 void __fastcall TfrmEnvoiEmail::SMTPConnecWorkEnd(TObject *Sender, TWorkMode AWorkMode) { cggeProgress->Progress = cggeProgress->MaxValue; }
Car en effet, m�me si ma jauge progresse, son avancement de repr�sente pas le r�el �tat du traitement ... la jauge va par exemple sur un fichier joint de 2 Mo mettre 20 secondes pour arriver � 60%, pui hop sauter en l'espace de 2 secondes � 100%. Certes pour l'utilisateur, cela ne change pas grand chose, mais �tant perfectionniste, j'aimerais am�liorer tout cela![]()
Merci d'avance![]()
Partager