SMTP + Progressbar
spacer
Autor Nachricht
Stread
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Mi 09.11.11 15:14 
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.

ausblenden Delphi-Quelltext markieren
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.Max:=AWorkCountMax;
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: 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)
ausblenden Delphi-Quelltext markieren
1:
ProgressBar1.Position := round(FWorkCountMax / AWorkCount * 100);

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Administrator
Beiträge: 8371
Erhaltene Danke: 244

W2k, WXPpro
TP3 - D7pro
BeitragVerfasst: Mi 09.11.11 15:37 
Moin!

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem ist es das Progressbar1.max rauszubekommen.

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
procedure TForm1.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
begin
//ProgressBar1.Max:=AWorkCountMax;
ProgressBar1.Position:=0;
end;
Ich würde ja jetzt raten, dass dir da der Wert mitgeteilt wird? :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: Mi 09.11.11 16:36 
Dachte ich auch, allerdings liefert
ausblenden Delphi-Quelltext markieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: 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: forum.delphi-treff.d...273-Indy-SMTP-Client

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Stread Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home