Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi pop3abfrage + progressbar -> fehler (https://www.delphipraxis.net/47043-pop3abfrage-progressbar-fehler.html)

heribert 5. Jun 2005 17:01


pop3abfrage + progressbar -> fehler
 
hi, ich hab mir ein programm gecodet, dass sich zu einem pop3-server connectet und in ein listview alle namen von den vorhanden email-attachments schreibt. das klappt auch ganz gut, dann hab ich mir hier aus dem forum einen code für eine progressbar geholt, den man bei der indy pop3-komponente in den onwork-event schreibt. die funktioniert jetzt zwar, aber dafür zeigt das programm nur noch eine zeile an und gibt dann den fehler "listenindex überschreitet das maximum(2)" aus...

der code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Pop3ServerName, Pop3ServerUser, Pop3ServerPassword: string;
  Pop3ServerPort, FMsgCount, FMailBoxSize, intindex, intindex2: integer;
  li: TListItem;
begin
  IdPOP31.Host := Pop3ServerName;
  IdPOP31.Port := Pop3ServerPort;
  IdPOP31.Username := Pop3ServerUser;
  IdPOP31.Password := Pop3ServerPassword;
  IdPOP31.Connect;
  FMsgCount := IdPOP31.CheckMessages;
  FMailBoxSize := IdPOP31.RetrieveMailBoxSize div 1024;
for intIndex := 1 to FMsgCount do begin
  IdPOP31.Retrieve(intIndex, IdMessage1);
  for intIndex2 := 0 to Pred(IdMessage1.MessageParts.Count) do begin
   if (IdMessage1.MessageParts.Items[intIndex2] is TIdAttachment) then begin
      li := ListView1.Items.Add;
      li.Caption :=
        TIdAttachment(IdMessage1.MessageParts.Items[intIndex]).Filename;
   end;
  end;
end;
end;

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

procedure TForm1.IdPOP31WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
if AWorkMode = wmRead then
  Label4.Caption:='Downloading...'
else
  Label4.Caption:='uploading Data';
ProgressBar1.Max:=51402; //ist nur zu testzwecken, da AWorkCountMax immer 0 war...
end;

procedure TForm1.IdPOP31WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmRead then
  Label4.Caption:='Download wurde beendet.'
else
  Label4.Caption:='uploading complete';
end;

Sharky 5. Jun 2005 17:13

Re: pop3abfrage + progressbar -> fehler
 
Hai heribert,

ich glaube hier benutzt Du die falsche "Schleifen-Variable":
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
.
.
for intIndex := 1 to FMsgCount do begin
  IdPOP31.Retrieve(intIndex, IdMessage1);
  for intIndex2 := 0 to Pred(IdMessage1.MessageParts.Count) do begin
   if (IdMessage1.MessageParts.Items[intIndex2] is TIdAttachment) then begin
      li := ListView1.Items.Add;
      li.Caption :=
        TIdAttachment(IdMessage1.MessageParts.Items[[b]intIndex[/b]]).Filename;
                                                    ^^^^^^^^
   end;
  end;
end;
end;
Da müsste meine ich intIndex2 stehen.

heribert 5. Jun 2005 17:18

Re: pop3abfrage + progressbar -> fehler
 
hmm, jo, jetz gehts zwar, aber jetzs teth da 2mal derselbe name untereinander... und das sind mit sicherheit 2 verschieden :?

marabu 5. Jun 2005 17:35

Re: pop3abfrage + progressbar -> fehler
 
Hallo heribert,

ich weiß nicht wo du den Code gefunden hast, aber über den Fehler sind schon andere gestolpert:

Delphi-Quellcode:
...
  FMsgCount := IdPOP31.CheckMessages;
  for intIndex := 1 to FMsgCount do begin
    IdPOP31.Retrieve(intIndex, IdMessage1);
...
Das muss so aussehen:

Delphi-Quellcode:
var
  msgList: TStringList;
  msgNum: string;
...
  msgList := TStringList.Create; // soviel Zeit muss sein
...
  if not idPOP3.UIDL(msgList) then begin
    msgList.Free;
    Exit;
  end;

  for intIndex := 0 to msgList.Count - 1 do begin
    msgNum := msgList[intIndex];
    SetLength(msgNum, Pos(' ', msgNum) - 1);
    IdPOP31.Retrieve(StrToInt(msgNum), IdMessage1);
...
  msgList.Free;
Grüße vom marabu

heribert 5. Jun 2005 17:44

Re: pop3abfrage + progressbar -> fehler
 
hmm, sorry, aber dein code macht bei mir nur ne access violation...
und den anderen code hab ich im übrigen aus der indy mailclient-demo...

Luckie 5. Jun 2005 17:46

Re: pop3abfrage + progressbar -> fehler
 
Zitat:

Zitat von heribert
hmm, sorry, aber dein code macht bei mir nur ne access violation...

Hilfreich wäre jetzt WO er eine AV auslöst.

heribert 5. Jun 2005 17:52

Re: pop3abfrage + progressbar -> fehler
 
hmm, ich glaub, ich hab den fehler gefunden:
Delphi-Quellcode:
  IdMessage1.Clear;
  IdPOP31.RetrieveHeader(intIndex, IdMessage1);
dumm, was? *g*
aber seltsam sits schon, dass das auch mal ohne das IdMessage1.Clear ging...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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