Autor Beitrag
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: Mo 23.07.07 22:15 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

WinXP
Delphi 7 Enterprise
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Hendi48 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: 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:
ausblenden volle Höhe 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):
ausblenden Delphi-Quelltext
1:
procedure TDownloadThread.Execute(Filename: String; URL: String);