![]() |
Problem mit Fortschrittsanzeige idHTTP
Hallo,
ich habe mit Hilfe dieses Tutorials ( ![]() eine Fortschrittsanzeige über idHTTP gemacht. Soweit sogut, sobald er aber die Datei downloaden will, erscheint folgende Meldung: Zitat:
Delphi-Quellcode:
)
lStream:=TFileStream.Create(GetApplicationDirectory + 'Datei.exe', fmCreate or fmShareDenyNone);)
Hängt das evt. mit diesem repeat zusammen?? Gruß Stresslein |
Re: Problem mit Fortschrittsanzeige idHTTP
Also ein bischen mehr Code musst du uns schon geben. Wir sind hier zwar gut, aber so gut nun auch wieder nicht. :roll:
|
Re: Problem mit Fortschrittsanzeige idHTTP
Meine originalen Daten bezügl. Downloadpfad habe ich durch "Downloadpfad" ersetzt.
Delphi-Quellcode:
Dies ist der Teil bei dem meiner Meinung nach der Fehler liegt. Der Rest kann man in dem Tutorial von oben sehen...
procedure TForm1.Timer4Timer(Sender: TObject);
var BytesKopiert, BytesInsgesamt : int64; lStream: TFileStream; begin label6.Visible:=true; form1.Height:=250; Status.Caption:='Initialisieren'; //Initialisieren Status.Caption := ''; BytesKopiert := 0; Progress.Position := 0; Status.Caption := 'Prüfe Header'; // Durch die zwei nächsten Befehle wird die Größe ermittelt und ihn der Variable BytesInsgesamt abgespeichert Status.Caption:='Dateigröße ermitteln'; IdHTTP.Head(Downloadpfad); BytesInsgesamt := IdHTTP.Response.ContentLength; Progress.Max := BytesInsgesamt; Status.Caption := 'Erstelle Datei'; //Datei erstellen lStream:=TFileStream.Create(GetApplicationDirectory + 'Datei.exe', fmCreate or fmShareDenyNone); lStream.Position := 0; try repeat Application.ProcessMessages; IdHTTP.Request.ContentRangeStart := BytesKopiert; if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then IdHTTP.Request.ContentRangeEnd := BytesKopiert+cFileSplitSize-1; end else IdHTTP.Request.ContentRangeEnd := BytesInsgesamt; Application.ProcessMessages; //Den eingesttelten Teil herunterladen und ihn die Datei speichern IdHTTP.Get(Downloadpfad, lStream); Progress.Position := BytesKopiert; Status.Caption := GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt); BytesKopiert := BytesKopiert+cFileSplitSize; until (BytesKopiert >= BytesInsgesamt); //Schleife beenden wenn datei fertig finally if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt end; Status.Caption := 'Fertig'; SpeedLabel.caption := 'Fertig'; Progress.Position := 100; timer4.enabled:=false; end; |
Re: Problem mit Fortschrittsanzeige idHTTP
Moin Stresslein,
also für einen Progressbar bei TidHTTP.Get verwende ich die Ereignisse OnWorkBegin, und OnWork. Beispiel:
Delphi-Quellcode:
In OnWorkBegin werden die ProgressBar initialisiert, und die gefundene Dateigrösse in ein Label geschrieben.
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer); begin ProgressBar1.Max := AWorkCountMax; Label1.Caption := IntToStr(AWorkCountMax); Application.ProcessMessages; end; procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin ProgressBar1.Position := AWorkCount; Label2.Caption := IntToStr(AWorkCount); Application.ProcessMessages; end; In OnWork dient dann dazu den Fortschrittsbalken laufen zu lassen, und den aktuellen Stand der heruntergeladenen Bytes anzuzeigen. Application.ProcessMessages sorgt dann dafür, dass die Label aktualisiert werden. Nicht schön, aber funktioniert ;-) [EDIT] Bei erneutem durchsehen Deines Sourcecodes: Ich denke mal, dass Dein Problem dadurch verursacht wird, dass Du das ganze in einem OnTimer-Event aufrufst. In diesem Falle solltest Du den Timer zu beginn der Routine ab-, und beim Verlassen wieder einschalten. Beispiel:
Delphi-Quellcode:
try/finally um sicherzustellen, dass der Timer auch bei einem Fehler weiterläuft.
begin
Timer4.Enabled := false; try // Was so alles passieren soll finally Timer4.Enabled := true; end; end; [/EDIT] |
Re: Problem mit Fortschrittsanzeige idHTTP
ja vielen Dank es klappt jetzt. Du hattest Recht mit dem Timer...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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