Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mail status ... progessbar (https://www.delphipraxis.net/25295-mail-status-progessbar.html)

edi-design 4. Jul 2004 12:21


mail status ... progessbar
 
hi leute

ich bruach mal wieder eure hilfe ;)

und zwar sitz ich grade an einem kleinen tool, für meine community, das tool versendet emails, an bestimmte adressen, mit größerem anhang (so 10-15mb)
über den sinn bruacht ihr euch keien gedanken amchen ;) ich weiß das es sich für euch sicherlich komisch anhört ;)

und zwar läuft das mit dem senden auch super und einwandfrei, mails kommen an, auch mit dne anhängen ;)
ich benutze zum sendne die indy-komponenten (TIDsmtp)

jetzt hätte ich aber gerne ne progressbar drin, welche anzeigt, wieviel von der mail (dem anhang) schon gesendet wurde, aber ich weiß absolut nciht wie ich das machen kann ;(

hoffe ihr könnt mir helfen ;(

cu andré

Stevie 5. Jul 2004 08:48

Re: mail status ... progessbar
 
Ich hab dir mal ein kleines Beispiel zusammengebastelt:
Delphi-Quellcode:
procedure TForm1.IdSMTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := FileSizeByName('C:\DreamControls.chm');
  ProgressBar1.Position := 0;
end;

procedure TForm1.IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.IdSMTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position := 0;
end;
Normalerweise sollte man AWorkCountMax nehmen, um die Anzahl der zu übertragenden Bytes herauszufinden, aber
Zitat:

Zitat von Die Indy-Hilfe
AWorkCountMax indicates the maximum number of bytes expected for the operation sent to OnWorkBegin, or 0 when the number of bytes not known.

Leider ist das, was ich dort fett dargestellt habe, bei der Übertragung einer Message der Fall.
Wenn du es also genau machen willst, dann musst du dir die einzelnen Teile vornehmen und die Größe selber zusammenbasteln.

edi-design 5. Jul 2004 14:34

Re: mail status ... progessbar
 
danke dir vielmals für diene hilfe ;)
funzt einwandfrei

da ich ja sowieso nur auf die anhänge der mails ausbin, interessierne mich die par kb text net, die machen da keinen großen aussschlag, also reichts mit filesize ;)

jetzt hab ich nur ein problem ;(

und zwar seit dem ich progrssbar drin hab, fiert das programm ein ;(
also progressbar läuft zwar weiter und er sendet auch, aber ich könnte beispielsweise keine button mehr drücken während er sendet ;(

das antifreeze von indy hab ich schon dabei ;( funzt aber auch ent

hat jemand ne idee ? ;)

cu andré

Stevie 5. Jul 2004 14:37

Re: mail status ... progessbar
 
Versuch's mal mit nem Application.ProcessMessages im OnWork-Event...

edi-design 5. Jul 2004 14:48

Re: mail status ... progessbar
 
danke dir ;)

du bist mein held ;)

funzt so einwandfrei, zwar mit verzögerung von ca. 1sek, aber damit kann ich 100% leben ;)
haußtsache es reagiert überhaupt ;)

cu andré

edi-design 5. Jul 2004 15:57

Re: mail status ... progessbar
 
sry wegen dem doppel post ;(
hab abe rnoch eine wichtige frage, dann kann ich den thread als beantwortet abstemplen ;)

und zwar würde mich nur interessieren, wie schnell de rupload jetzt is, also wie mit welchem speed die mail gesendet wird ;)

thx 4 help

cu andré

Stevie 5. Jul 2004 16:17

Re: mail status ... progessbar
 
Einen Timer und das hier:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := Format('%d Bytes/sek', [BytesSend - Start]);
  Label1.Repaint;
  Start := BytesSend;
end;
Den Timer in OnWorkBegin enablen und im OnWorkEnd disablen.
Start in diesen beiden Methoden auf 0 setzen; BytesSend im OnWork auf AWorkCount setzen

edi-design 5. Jul 2004 17:41

Re: mail status ... progessbar
 
danke dir ;)
was würde ich nur ohne dich machen ;)

funzt einwandfrei, hatte mir das auch sleber mit nem timer gedacht, aber flasch umgestezt, udn zwar hab ich die sekunden gezählt dann die bytessend durch vergangegene sekunden geteilt, aber irgendwei ging das net ;(

einziges prob noch ;(
der startet den timer erst nachdem er gesendet hat ;( ka wieso ;( der zählt erst am ende runter ;(

cu andré

Stevie 6. Jul 2004 07:42

Re: mail status ... progessbar
 
Tja... :wink:
Da fehlt 100%ig noch ein Application.ProcessMessages im OnWork-Event.

edi-design 6. Jul 2004 15:41

Re: mail status ... progessbar
 
hmm eigneltich isses drin ;(

egal werd den fehler shcon finden ^^

nochmal vielen vielen dank für deine hilfe

cu andré

St. Janos 25. Dez 2004 17:55

Re: mail status ... progessbar
 
Zitat:

Zitat von edi-design
danke dir vielmals für diene hilfe ;)
funzt einwandfrei

da ich ja sowieso nur auf die anhänge der mails ausbin, interessierne mich die par kb text net, die machen da keinen großen aussschlag, also reichts mit filesize ;)

jetzt hab ich nur ein problem ;(

und zwar seit dem ich progrssbar drin hab, fiert das programm ein ;(
also progressbar läuft zwar weiter und er sendet auch, aber ich könnte beispielsweise keine button mehr drücken während er sendet ;(

das antifreeze von indy hab ich schon dabei ;( funzt aber auch ent

hat jemand ne idee ? ;)

cu andré

heyho,
hab in etwa selbiges Problem. Ich bin aber auch noch lange nicht so weit, wie der Kollege.
Ich hab heut erstmal ne bissel mit der POP3 Komponente von Indy rumprobiert. Mein Program friert momentan ein, wenn ich auf ein Pop3 Konto connectete, wo schon ein Benutzer eingeloggt ist. Ist auch logisch, nach Spezifikation des Pop3 Protokolls: Da auf ein Konto ja nur eine Verbindung zur Zeit statt finden darf. Ich habe das ganze dann über ne Exception abgefangen.
Und hier friert das Programm sich ein. Und zwa ab dem klicken auf Verbinden bis zur Ausgabe der Exception.
Ich würde das einfrieren nun gerne verhindern. Habe in den OnWork meines IdPOP3 über den Objektinspektor auch des Application.ProcessMessages gesetzt, doch funzt es nicht.
Ich benutze keine IdAntifreeze Komponente, da ich gelesen habe das diese auch nur in bestimmten Zeitabständen ein Application.ProcessMessages ausführt.
Ich weiss aber ehrlich gesagt auch garnicht wie ich diese verwenden sollte. Würde mich anbei auch mal interessieren:)
Um auf das Problem zurück zu kommem: Was mach ich falsch?
Hier mal der gesamte Quellcode. Ist momentan nur zum testen gedacht:
Delphi-Quellcode:
unit u_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdMessageClient, IdPOP3, IdException;

type
  TPopDown = class(TForm)
    POP: TIdPOP3;
    btn_connect: TButton;
    procedure btn_connectClick(Sender: TObject);
    procedure POPWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  PopDown: TPopDown;

implementation

{$R *.dfm}

procedure TPopDown.btn_connectClick(Sender: TObject);
begin
  POP.Host := '127.0.0.1';
  POP.Port := 110;
  POP.Username := 'root';
  POP.Password := '';
  try
    POP.Connect(400);
  except
    on E:EIdProtocolReplyError do
      showmessage(E.Message);
    else
      showmessage('Irgendwas');
  end;
  if POP.connected then
    begin
      showmessage('Connected successfully');
      POP.Disconnect;
      showmessage('Connection closed');
    end;
end;

procedure TPopDown.POPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Application.ProcessMessages;
end;

end.
bin für jede hilfe dankbar:)

hippe-di-hop
janos

Äfan 25. Dez 2004 20:45

Re: mail status ... progessbar
 
Zitat:

ProgressBar1.Max := FileSizeByName('C:\DreamControls.chm');
Ich habe das auch mal probiert, bei mir zeig er aber: [Fehler] Unit1.pas(39): Undefinierter Bezeichner: 'FileSizeByName'. Habe in der hilfe auch nix gefunden.

mfg

St. Janos 25. Dez 2004 21:41

Re: mail status ... progessbar
 
Zitat:

Zitat von Äfan
Zitat:

ProgressBar1.Max := FileSizeByName('C:\DreamControls.chm');
Ich habe das auch mal probiert, bei mir zeig er aber: [Fehler] Unit1.pas(39): Undefinierter Bezeichner: 'FileSizeByName'. Habe in der hilfe auch nix gefunden.

mfg

ich weiss net ob es bei der personal ne unterschied gibt, aber probiers sonst mal mit

Zitat:

ProgressBar1.Max := SysUtils.FileSizeByName('C:\DreamControls.chm');
vllt. auch noch
Zitat:

uses ... SysUtils, System, Files, ...;
würde auf jeden in die richtung arbeiten. fall's es dann noch net geht, makier mal FileSizeByName und mach ne Schnellsuche über rechtsklick. da sollte stehen, wie man des deklariert.


//EDIT: hab de fehler etz. FileSizeByName is Indy und aus der unit IdGlobal


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.

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