Autor Beitrag
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
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.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, 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
1:
ProgressBar1.Position := round(FWorkCountMax / AWorkCount * 100);					

_________________
Delphi: XE - OS: Windows 7 Professional x64
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
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
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.
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
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, 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
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.