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 Suche in der Entwickler-Ecke 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  

{ TDownloadThread }  

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);