il crée un nouveau fil pour envoyer des email.
>> Peut-il l'utilisateur à partir de ce moment dorénavant faire quelque chose dans l'application ?
sure. mais il y a deux choses que vous devez commander :
1. l'utilisateur veulent stopper de votre application mais les email envoient toujours. Dans ce cas-ci vous pouvez terminer le fil ou attendre son finissage
2. ne pas changer query1, edit1, edit2 parce que le fil les emploie
>> Ce qui si une erreur se produit. L'utilisateur pourra-t-il toujours obtenir ceci ?
Oui, votre essai/excepté/showmessage fonctionnent toujours :
essai
IdSMTP.Connect ;
IdSMTP.Send (IdMsg) ;
excepté
Showmessage (« erreur en envoyant l'email ") ;
extrémité ;
Il vaudrait mieux d'envelopper tout exécutent la méthode dans l'essai/excepté trop comme ceci :
procédé TEmailThread.Execute ;
variété IdSMTP : TIdSMTP ;
IdMsg : TIdMessage ;
I : Nombre entier ;
commencer
essai
IdSMTP : =TIdSMTP.Create (zéro) ;
IdSMTP.Host : = ' my.domain.nl'; // remplacent par votre serveur sortant
IdSMTP.Port : =25 ;
IdSMTP.Username : = « MyUserName » ;
IdSMTP.Password : = « MyPassword » ;
essai
sinon IdSMTP.Connected alors
IdSMTP.Connect ;
Pour I : = 0 à Query1.Recordcount -1 font
commencer
si terminé alors sortir ;
essai
IdMsg : =TIdMessage.Create (zéro) ;
IdMsg.From.Address : = edit1.Text ;
IdMsg.Subject : = edit2.text ;
IdMsg.Recipients.EMailAddresses : = Query1.FieldByName (« email ").Text ;
Début de // une certaine fonction pour personnaliser le corps par client
IdMsg.Body.Text : = PersonalizeEmailForCustomer ;
essai
IdSMTP.Connect ;
IdSMTP.Send (IdMsg) ;
excepté
sur E : L'exception font
Showmessage (« erreur en envoyant l'email : » + E.Message) ;
extrémité ;
finalement
IdMsg.Free ;
extrémité ;
Query1.Next ;
extrémité ;
finalement
s'IdSMTP.Connected alors
IdSMTP.Disconnect ;
IdSMTP.Free ;
extrémité ;
excepté
sur E : L'exception font
Showmessage (« erreur en envoyant l'email : » + E.Message) ;
extrémité ;
extrémité ;
>> Est-ce qu'est-il il encore possible d'informer l'utilisateur que l'envoi a fini, donnent un certain résultat ?
Vous pouvez employer le message d'OnTerminate ou
avec TEmailThread.Create (vrai) faire
commencer
OnTerminate : = ThreadOnTerminate ;
FreeOnTerminate : = rectifier ;
Résumé ;
extrémité ;
procédé TMainForm.ThreadOnTerminate (ASender : TObject) ;
commencer
ShowMessage (le « travail est réalisé ") ;
extrémité ;
>> Par conséquent je dois passer ce contenu au fil de façon ou d'autre
vous pouvez passer au fil tous les paramètres que vous aimez par l'intermédiaire de son constructeur. Par exemple :
TEmailThread = classe (TThread)
privé
FSubject : corde ;
protégé
le procédé s'exécutent ; dépassement ;
public
le constructeur créent (const ASubject : corde) ;
extrémité ;
constructeur TEmailThread.Create (const ASubject : corde) ;
commencer
hérité créer (rectifier) ;
FSubject : = ASubject ;
extrémité ;
procédé TEmailThread.Execute ;
…
// using la variété locale
IdMsg.Subject : = FSubject ; // était IdMsg.Subject : = edit2.text ;