Utilisation de IdSMTP et d'une progressbar

cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011 - 24 août 2010 à 13:47
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011 - 25 août 2010 à 10:48
Bonjour,

Je voudrais utiliser une progressbar, lors de l'envoi d'un fichier dans un mail, mais
le code que j'utilise ne fonctionne pas.

procedure TForm1.IdSMTPWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
if AWorkMode = wmWrite then
begin
Application.ProcessMessages;
ProgressBar1.Position := AWorkCount;
ProgressBar1.Refresh;
Application.ProcessMessages;
end;
end;


Pouvez-vous m'aider ?
Cordialement,

11 réponses

Utilisateur anonyme
24 août 2010 à 21:14
Salut,

Mais qu'est ce que c'est que ce code tout pourri/pourrave ?

1)On utilise la balise Code quand on poste un bout de code sur le forum

2)On indente son code

Version code tout caca d'origine :
procedure TForm1.IdSMTPWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
if AWorkMode = wmWrite then
begin
Application.ProcessMessages;
ProgressBar1.Position := AWorkCount;
ProgressBar1.Refresh;
Application.ProcessMessages;
end;
end; 


Version toute propre :
procedure TForm1.IdSMTPWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
Begin
  If AWorkMode = wmWrite Then
    begin
      Application.ProcessMessages;
      ProgressBar1.Position := AWorkCount;
      ProgressBar1.Refresh;
      Application.ProcessMessages;
    End;
End; 


On pense aux majuscules, à faire des tabulations ect ect

3)C'est quoi ces ProcessMessages qui sentent le gnou ?

4)On regarde s'il n'y a pas d'autres évènements à utiliser pour paramêtre la propriété Max de ta ProgressBar


Allez zou : Code non testé mais qui devrait fonctionner

procedure TForm1.IpSmtpClient1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  If AWorkMode = wmWrite Then 
  With ProgressBar1 Do   
  Begin
    Max:=AWorkCountMax;
Position:=0;
  End;	
end;

procedure TForm1.IpSmtpClient1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  If AWorkMode = wmWrite Then 
  ProgressBar1.Position:=AWorkCount;
end;

procedure TForm1.IpSmtpClient1WorkEnd(Sender: TObject;
  AWorkMode: TWorkMode);
begin
  ProgressBar1.Position:=0;
end;
0
Utilisateur anonyme
24 août 2010 à 21:17
Désolé mais il y a eu une ouille au niveau du copier/coller à partir de NotePad++ (Peut être un beug à faire remonter si un admin passe par là)

procedure TForm1.IpSmtpClient1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
Begin
  If AWorkMode = wmWrite Then 
  With ProgressBar1 Do   
    Begin
      Max:=AWorkCountMax;
      Position:=0;
    End;	
End;
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
24 août 2010 à 22:35
Merci, de ton aide.

Mais rien n'y fait, le code ne fonctionne pas...


SSD
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
24 août 2010 à 22:41
Après avoir vérifié,
la valeur de AWorkCountMax; est toujours égale à 0, même quand j'ai des pièces jointes...

N'y aurait il pas un beug, dans le composant.???

SDD
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 août 2010 à 23:02
Ca donne quoi ainsi ?

procedure TForm1.IpSmtpClient1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
Begin
  Showmessage(IntToStr(AWorkCountMax));	
End;
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
24 août 2010 à 23:22
Ca donne 0 en permanence...
0
Utilisateur anonyme
24 août 2010 à 23:30
Pourrais tu passer ton code entièrement stp car à priori cela devrait fonctionner si on fixe à cet exemple pour TIdHTTP
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
24 août 2010 à 23:38
Je te copie quoi exactement du code. Oui j avais vu l exemple avec idhttp. Mais j ai lu que a priori, ca beug avec idsmtp, il faut donner la taille du fichier a la place de AworkcountMax...
0
Utilisateur anonyme
24 août 2010 à 23:42
P'tain il y a pas moyen de dormir pépère ce soir lol ?

Tu postes plus vite que ton ombre toi

Mais j ai lu que a priori, ca beug avec idsmtp
Ben si tu connais la réponse, pourquoi tu poses la question ?

Les composants Indy sont OpenSource : Donc à toi de faire une séance de spéléologie pour trouver le beug et le corriger. Bonne chance
0
Utilisateur anonyme
25 août 2010 à 02:37
il faut donner la taille du fichier a la place de AworkcountMax
ça m'étonnerait que cela soit aussi facile que cela .

L'évènement OnWork est (surement) appelé quand l'e-mail est envoyé (Je pense). Hors un email c'est un en-tête + un corps + des fichiers encodés en base 64.

A mon avis tu dois avant tout regarder en détail le code de ce composant (Et avec Indy ça sent la partie de plaisir indigeste ).

Bon courage à toi
0
cs_ssd Messages postés 50 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 31 août 2011
25 août 2010 à 10:48
, je ne voulais pas t'empêcher de dormir.

J'ai posé la question, afin de s'avoir si quelqu'un avait été confronté au problème, car le site sur lequel je l'ai lu est en allemand et il propose de calculer la taille du fichier séparément puis de l'injecter dans la procédure...

Je n'ai pas un niveau suffisamment pro, en Delphi pour m'attaquer aux composant Indy.

En tout cas merci, quand même d'avoir essayé de m'aider.
0
Rejoignez-nous