Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idPOP3 und ProgressBar (https://www.delphipraxis.net/39879-idpop3-und-progressbar.html)

Sascha L 8. Feb 2005 15:37


idPOP3 und ProgressBar
 
Hallo,

ich nutze die idPOP3-Komponente (Indy 10) und eine Progressbar.

Die Progressbar soll mir den aktuellen Download-Fortschritt anzeigen, dafür verwende ich die Ereignisse "OnWork", "OnWorkBegin" und "OnWorkEnd".

Ich habe zum Testen mal in den Ereignissen folgendes reingeschrieben:

Delphi-Quellcode:
Memo1.Lines.Add(IntToStr(AWorkCount));
Mir ist dabei aufgefallen, dass die Variable auch einen Wert beim Verbinden zum Server und beim Einloggen annimmt.

Insgesamt wird also AWorkCount mit neuen Daten gefüllt. (Verbinden, Einloggen, Email downloaden).

Ich habe also bei OnWorkEnd die Progressbar-Position wieder auf 0 gesetzt, damit er wieder von vorne anfängt. Sonst würde er ja schon 100% anzeigen, wenn er sich gerade mal mit dem Server verbunden hat.

Wie bekomme ich es aber nun hin, dass er mir nur den Fortschritt beim Dowloaden der Email anzeigt, denn das Verbinden und Einloggen ist überflüssig, da es nur ein paar Bytes sind.

Beim Test mit dem Memo ist mir aufgefallen, dass AWorkCountMax stets 0 ist!! d.h. meine ProgressBar wird sofort auf 100% gesetzt, obwohl er die Email gerade erst anfängt herunterzuladen.

Hat jemand dasselbe Problem und es schon behoben, oder kann mir allgemein hier weiterhelfen?

Gruß
Sascha

Sprint 9. Feb 2005 00:17

Re: idPOP3 und ProgressBar
 
Mit RetrieveMsgSize ermittelst du die Größe der Nachricht. Damit OnWork in Verbindung mit einer ProgressBar läuft, musst du die Nachricht mit RetrieveRaw abholen. Benutzt du Retrieve, wird zu erst der Header geholt und dann die Nachricht. Beides zusammen ergeben dann aber wieder die Größe von RetrieveMsgSize.


Edit: \\ Mein Beitrag war auf Indy 9 bezogen. Ob bei Indy 10 was geändert worden ist, das weiß ich nicht. Einfach mal ausprobieren.

Sascha L 9. Feb 2005 17:02

Re: idPOP3 und ProgressBar
 
Bei RetrieveRaw kann ich aber nicht mehr angeben, wohin die Nachricht geladen werden soll, nämlich in idMessage1. :gruebel:


EDIT:

Ich habe es nun so realisiert:

Bei der Prozedur, die die Mails abruft, etc. habe ich vor

Delphi-Quellcode:
idPOP31.Retrieve(1,idMessage1);
Delphi-Quellcode:
msgsize := idPOP31.RetrieveMSGSize
geschrieben, wobei msgsize eine globale Variable vom Typ Integer ist.

Bei OnWorkBegin und OnWork habe ich die Bedingung (if AWorkMode = wmRead), sodass er Anfragen zum Server (Connect, Login) nicht berücksichtigt. Des Weiteren habe ich nun als Maximum für die Progessbar msgsize genommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz