Utilisation de IdSMTP et d'une progressbar

Signaler
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011
-
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011
-
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


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;

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;
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011

Merci, de ton aide.

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


SSD
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011

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

Ca donne quoi ainsi ?

procedure TForm1.IpSmtpClient1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
Begin
  Showmessage(IntToStr(AWorkCountMax));	
End;
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011

Ca donne 0 en permanence...

Pourrais tu passer ton code entièrement stp car à priori cela devrait fonctionner si on fixe à cet exemple pour TIdHTTP
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011

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...

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

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
Messages postés
50
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
31 août 2011

, 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.