Entwickler-Ecke
Internet / Netzwerk - SMTP + Progressbar
Stread - Mi 09.11.11 15:14
Titel: SMTP + Progressbar
Hi,
Ich versende e-mails von meinem Programm aus über SMTP.
Auch Anhänge mitschicken geht.
Bei großen Anhängen dauert es eine weile bis es zu meinem e-mail Account hochgeladen und dann verschickt wurde also wollte ich eine ProgressBar einbauen um den Fortschritt sichtbar zu machen.
Mein Problem ist es das Progressbar1.max rauszubekommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin ProgressBar1.Position:=0; end;
procedure TForm1.IdSMTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin ProgressBar1.Position:=AWorkCount; ProgressBar1.Update; end; |
So funktioniert die ProgressBar, allerdings ist sie schon längst voll obwohl noch Daten gesendet werden. Max ist voreingestellt auf 100 allerdings hängt es natürlich von der Dateigröße ab, was max ist. (Beim letzten Versuch z.b war es 50000)
Wenn ich das ProgressBar1.Max:=AWorkCountMax; bei 4: wieder dazunehme, bekomme ich , egal wie groß die Datei ist, überhaupt keinen Fortschritt angezeigt.
PS: Beim FTP Upload ist die Größe bekannt, dort funktioniert die ProgressBar auch so wie sie soll.
Horschdware - Mi 09.11.11 15:36
Beim Start des UploadsFWorkCountMax in separater Variable wegsichern (falls später nicht mehr zugreifbar) und
dann den Fortschritt wie folgt darstellen:
(Annahme: Progressbar1.Max = 100)
Delphi-Quelltext
1:
| ProgressBar1.Position := round(FWorkCountMax / AWorkCount * 100); |
Narses - Mi 09.11.11 15:37
Moin!
Stread hat folgendes geschrieben : |
Mein Problem ist es das Progressbar1.max rauszubekommen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin ProgressBar1.Position:=0; end; | |
Ich würde ja jetzt raten, dass dir da der Wert mitgeteilt wird? :nixweiss:
cu
Narses
Stread - Mi 09.11.11 16:36
Dachte ich auch, allerdings liefert
Delphi-Quelltext
1:
| Label10.Caption:=IntToStr(AWorkCountMax); |
den Wert 0 zurück. Was ja nicht sein kann.
Horschd, es geht hier nicht um die Position sondern um das Ende also Progressbar.max , welches sich ändern muss.
Horschdware - Mi 09.11.11 17:52
Ein kurzer Blick in Forensuche oder Google ergibt, dass dieser Fehler (WorkCOuntMax immer 0) schon lange (~2004?) bekannt ist. Umgehen lässt sich das wohl, indem man entweder die Nachricht einmal mit der von IdSMTP bereitgestellten Methode ins Dateisystem speichert (da dann der Workcount aktualisiert wird).
Alternativ kann man sich die Größe aber auch selbst berechnen.
Beispiel siehe hier:
http://forum.delphi-treff.de/showthread.php?8273-Indy-SMTP-Client
Stread - Mi 09.11.11 18:21
Ich habe nur Jahre alte Threads gefunden und dachte das der Fehler schon behoben wurde.
Nach einer kleinen Änderung geht es bei mir nun auch.
Allerdings nur mit Attachments.
Ist auch das auch noch aktuell?
Zitat: |
Das zweite Problem ist ärgerlicher. Wie breche ich eine Übertragung von Attachments ab. Bei der Fastnetkomponente ging das einfach mit Hilfe von SMTP.Cancel. Bei der Indikomponente FTP geht das über http://FTP.Abort, wie ich gestern gesehen habe. Vergleichbares habe ich bei der SMTP Komponente nicht gefunden.
Mache es momentan mit Hilfe des Befehls Disconnect. Sehr unschön, Oder? |
Wobei bei mir nicht einmal das funktioniert. Ich kann das Programm nach dem Disconnect nicht schließen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!