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;