Entwickler-Ecke
Internet / Netzwerk - Fragen zu IdHTTP
Hendi48 - Mo 23.07.07 22:15
Titel: Fragen zu IdHTTP
Hi,
ich habe ein IdHTTP auf meiner form welches über .get immer eine Datei [30 MB] downloaden soll und da hätte ich ein paar Fragen:
1. Ich benutze eine Progressbar und in dieser wird der Fortschritt dargestellt. Kann ich noch irgednwie machen das in einem Label immer angezeigt wird wieviel % es ist?
2. Wenn ich auf den Button für Downloadstart drück, hängt das Programm (aber es downloadet schon das seh ich in cFos Speed) und erst wenn ich im programm irgendwo hin klick ist es nach 5 sec wieder ansprechbar. Kann ich das irgendwie beheben? (ich habe schon ein IdAntiFreeze auf der Form)
3. Das beschäftigt mich inmoment am meisten: Am Downloadende soll etwas aus einem Listview gelöscht werden, dazu habe ich das in OnWorkEnd getan. Aber das macht er schon am anfang (wahrscheinlich weil das idhttp auch schon für .post benutzt wird) kann ich das irgendwie anders machen das er etwas am Ende des Downloads macht (ich könnte auch wenn das %-Label 100 is aber das hab ich ja auch noch nicht)
Svenkan - Sa 28.07.07 00:24
zu 1.) Dazu kannst du am besten statt einer Progressbar TGauge benutzen (zu finden unter 'Beispiele'. Dann wird der Fortschritt in Prozent immer direkt in im Balken angezeigt. Ansonsten bspw:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TUpdate.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin Application.ProcessMessages; Label1.Caption:=IntToStr(Round((AWorkCount/IdHTTP1.Response.ContentLength)*100))+' %'; end; |
zu 2.) Dazu nimm Application.ProcessMessages.
zu 3.) Probiers mal in IdHTTP1Disconnected. Sobald die Verbindung beendet wird, wird der Code ausgeführt.
GTA-Place - Sa 28.07.07 11:32
Zu 2.): Da hilft auch kein App.ProcessMsg, du müsstest das ganze in einen
TTHREAD auslagern.
Zu 3.): Nimm eine Boolean-Variable und setze die vor dem Download auf True und in OnWorkEnd wird dann nur gelöscht, wenn diese True ist.
Hendi48 - So 05.08.07 10:16
ok danke für die Antworten.
Aber zu dem Boolean: Das hab ich auch schon probiert nur das geht leider auch nicht weil ich mit postcode etwas sende und als Antwort bekomm ich halt den Download und dann würds auch wieder sofort nach dem senden löschen =(
Edit:
So das mit der %-Anzeige klappt jetzt und ich hab mir mal ein kleines programm gemacht um das mit den Threads auszuprobieren.
Das ist meine Thread Unit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| unit DownloadThread;
interface
uses Classes, IdHttp, IdComponent;
type TDownloadThread = class(TThread) private
protected procedure Execute; override; end;
implementation
procedure TDownloadThread.Execute; var IdHttp1: TIdHttp; FileS: TFileStream; begin IdHttp1:=TIdHttp.Create; FileS:=TFileStream.Create('Origin3.swf', fmcreate); IdHttp1.Get('http://hendiupdate.de.tk/Maple/Origin3.swf', FileS); FileS.Free; end;
end. |
Kann ich es jetz noch irgendwie machen das auch OnWork, OnWorkBegin und OnWorkEnd von dem iDHTTP funktioniert? Und wie mach ich das: (das geht irgendwie nich):
Delphi-Quelltext
1:
| procedure TDownloadThread.Execute(Filename: String; URL: String); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!