Download mit idHTTP mit Fortschrittsanzeige?
-
huhu zusammen!
1.) ich bin neu in C++ coden, komme von PHP
2.) hat einer ne Idee, ob und vorallem WIE sich soetwas realisieren läßt?
eine Seite, oder eine Datei runterladen ist nicht das Problem, aber ich hätte gerne ne Fortschrittsanzeige.Gruß
euer Prof
PS: super Forum!
-
Das lässt sich sicher über die OnWork...-Events erledigen (AWorkCount...).
-
könntest du das etwas detailierter erleutern? ich meine sagt mir das idHTTP mit irgenteiner eigenschaft, wieviele KB es schon hat, oder wieviele es insgesammt sind, oder sonst eine Info?
-
All diese Fragen beantwortet dir die Indy-Dokumentation. Schau dir in der Doku einfach mal den von Jansen erwähten Event an...
-junix
-
üha, die is ja englisch
ich werds versuchen...
-
hmm ein OnWork-Event für idHTTP konnte ich nicht finden... die docu sagt:
- OnAuthorization
- OnProxyAuthorization
- OnRedirect
- OnSelectAuthorization
- OnSelectProxyAuthorization
-
Und was sagt die Komponente selber (ObjectInspector)?
Welche Indy-Version benutzt du?
-
ohh stimmt im ObjectInspector steht ja ein OnWork drinne... komisch, warum wird das denn nicht in der Doku erwähnt?
die neuste, die es auf der IndyHP gab (9.00.11 oder so)
-
Original erstellt von Professor:
warum wird das denn nicht in der Doku erwähnt?Weil die Doku-Schreiber den Programmierern nicht hinterherkommen?
Die OnWork-Events sind aber als Bestandteil der Basisklasse TIdTCPConnection dokumentiert. U.a. auch zu erreichen durch Anwählen des Events im OI und drücken von F1 (sofern die Indy-Hilfe korrekt im BCB-Hilfesystem eingebunden wurde).
-
Um deine nächste Frage vorwegzunehmen: wo prüft man üblicherweise, wieviel maximal zu tun ist? Genau, bevor man mit der Arbeit beginnt.
-
naja, du musst das verstehn, das ist kein eigentliches Projekt was ich hier mache, sondern nur eine Art Machbarkeitsstudie...
und btw:
Nachdem man mit IdHTTP->Get(URL) sich den inhalt geholt hat, kann man mit IdHTTP->Response->ContentLength sich wunderbar die Maximale Dateigröße besorgen.
Und das mit dem momentan übertragendem Volumen hab ich auch schon hinbekommen
-
Original erstellt von Professor:
Nachdem man mit IdHTTP->Get(URL) sich den inhalt geholt hat, kann man mit IdHTTP->Response->ContentLength sich wunderbar die Maximale Dateigröße besorgen.Was nützt dir das denn nach dem Download?
-
nein, mit Get startet man ja den DL und mit OnWork refreshe ich dann meine Fortschrittsanzeige, bis er halt fertig ist OnWorkEnd...
-
Und wann/wo holst du die ContentLength?
-
hier:
void __fastcall TfrmMain::IdHTTPWork(TObject *Sender, TWorkMode AWorkMode, const int AWorkCount) { labSize->Caption = AWorkCount; labSize->Repaint(); labProgress->Caption = FloatToStrF(AWorkCount * 100.0/IdHTTP->Response->ContentLength, ffFixed,15,1) + " % fertig"; labProgress->Repaint(); }
bzw: einmal direkt nach dem aufruf mit IdHTTP->Get(...)
-
Original erstellt von Professor:
einmal direkt nach dem aufruf mit IdHTTP->Get(...)... ich denke die Tatsache, dass du NACH Get() die Länge abholst dürfte das Problem sein. Korrigier mich wenn ich mich irre aber Get() blockiert doch bis die Seite unten ist?
-junix
-
naja nicht ganz, ich hole mir dir contentlength bei OnWorkBegin von TIdHTTP
-
Ah ok (: hatte ich was überlesen oder so (: Sorry.
-junix
-
Kein Wunder, dass du dass überlesen hast, das hatte Professor ja auch nirgendwo geschrieben.
ich hole mir dir contentlength bei OnWorkBegin von TIdHTTP
Auf OnWorkBegin wollte ich ja die ganze Zeit hinaus, warum benutzt du nicht einfach die dort zur Verfügung gestellte Variable AWorkCountMax?
-
void __fastcall TfrmMain::IdHTTPWork(TObject *Sender, TWorkMode AWorkMode,
const int AWorkCount)ich seh da keine AWorkCountMax...
-
OnWorkBegin