procedure TForm4.Button1Click(Sender: TObject);
var
BytesKopiert, BytesInsgesamt: int64;
lStream: TFileStream;
begin
//Initialiesieren
Status.Caption := '
';
BytesKopiert := 0;
Progress.Position := 0;
//In edit 1 steht die downzuladene Datei (z.b. [url]http://www.server.com/datei.dat[/url])
Status.Caption := '
Prüfe Header';
// Durch die zwei nächsten Befehle wird die Größe ermittelt und ihn der Variable BytesInsgesamt abgespeichert
IdHTTP1.Head(Edit1.Text);
BytesInsgesamt := IdHTTP1.Response.ContentLength;
DateigroesseBytes := IdHTTP1.Response.ContentLength;
//Wenn die Indy Komponente -1 zurückgibt dann bedeutet es des der die Dateigröße nicht zu verfügung
//stellt uns somit kann die Datei ganz normall heruntergeladen werden (ohne Fortschrittsanzeige)
if BytesInsgesamt = -1
then
begin
Status.Caption := '
Normalles herunterladen';
Status.Caption := '
Erstelle Datei';
//In Edit 2 steht welche Datei (z.b. C:\datei.dat)
//Datei erstellen
lStream:=TFileStream.Create(Edit2.Text, fmCreate
or fmShareDenyNone);
try
//und "normal" herunterladen
idHTTP1.Get(Edit1.Text, lStream);
finally
if Assigned(lStream)
then lStream.Free;
//FileStream freigeben wenn gesetzt
end;
//Alles auf fertig stellen
Status.Caption := '
Fertig';
SpeedStatus.caption := '
Fertig';
exit;
end;
//Also wenn wir hier angelangt sind dann bedeutet es der Server hat uns die Dateigröße zur Verfügung gestellt.
Progress.Max := BytesInsgesamt;
Status.Caption := '
Erstelle Datei';
//In Edit 2 steht welche Datei (z.b. C:\datei.dat)
//Datei erstellen
lStream:=TFileStream.Create(Edit2.Text, fmCreate
or fmShareDenyNone);
lStream.Position := 0;
try
repeat
// Damit sich das Programm nicht aufhängt
Application.ProcessMessages;
//Nun setzen wir den Start nach die bereits kopierten Bytes
IdHTTP1.Request.ContentRangeStart := BytesKopiert;
//Hier wird gebrüft ob die restlichen Bytes größer sind als cFileSplitSize
if (BytesInsgesamt-BytesKopiert) > cFileSplitSize
then
begin
//Hier wird einmal die cFileSplitSize eingestellt
IdHTTP1.Request.ContentRangeEnd := BytesKopiert+cFileSplitSize-1;
end
//Den rest der Datei
else IdHTTP1.Request.ContentRangeEnd := BytesInsgesamt;
Application.ProcessMessages;
//Den eingesttelten Teil herunterladen und ihn die Datei speichern
IdHTTP1.Get(Edit1.Text, lStream);
//Progress und Status aktualliesieren
Progress.Position := BytesKopiert;
Status.Caption := GetSizeName(BytesKopiert)+'
/'+GetSizeName(BytesInsgesamt);
//BytesKopiert weiter setzen
BytesKopiert := BytesKopiert+cFileSplitSize;
until (BytesKopiert >= BytesInsgesamt);
//Schleife beenden wenn datei fertig
finally
if Assigned(lStream)
then lStream.Free;
//FileStream freigeben wenn gesetzt
end;
//Alles auf fertig stellen
Status.Caption := '
Fertig';
SpeedStatus.caption := '
Fertig';
Progress.Position := 100;
if FileExists(Edit2.Text)
then
begin
Application.MessageBox ('
Das Programm wird beendet, um ein Update zu installieren.','
Update wird durchgeführt',0+48);
ShellExecute(
Handle, '
open', PChar(Edit2.Text),
nil,
nil, SW_NORMAL);
Close;
end;
end;
procedure TForm4.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);
begin
if AWorkCountMax > 0
then Progress.Max := AWorkCountMax
else Progress.Max := DateigroesseBytes;
{FTime := GetTickCount;
FBytes := 0;
Application.ProcessMessages;}
end;
procedure TForm4.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Integer);
begin
Progress.Position := AWorkCount;
application.ProcessMessages;
{
if not((GetTickCount - FTime) <= 0) then
begin
try
SpeedStatus.caption := Format('%.2f KB/s', [(AWorkCount - FBytes) / (GetTickCount - FTime)]);
except
end;
end;
FTime := GetTickCount;
FBytes := AWorkCount;
Application.ProcessMessages; }
end;
procedure TForm4.BitBtn1Click(Sender: TObject);
var ip :
string;
online, pc, pfad, installation,
name :
string;
onl, off : real;
i : integer;
begin
installation:=ExtractFilePath(ParamStr(0));
name:=installation+'
update.exe';
Edit2.Text:=name;
if IsConnectedToInternet
then
Edit5.Text:='
1'
else
Edit5.Text:='
0';
if Edit5.Text <> '
0'
then
begin
ip:=IdHTTP1.Get('
http://www.bertbolz.de/home/nn/ip.php');
//ip Adresse
online:=IdHTTP1.Get('
http://www.bertbolz.de/home/nn/v.php?p=pm');
//Online Version
pfad:=IdHTTP1.Get('
http://www.bertbolz.de/home/nn/dir.php?p=pm');
//Pfad auf dem Server
end;
Label2.Caption:=
ip;
Edit3.Text:=online;
Edit1.Text:=pfad;
{i:=0;
while online[i]='.' do
begin
i:=i+1;
online[i]:=',';
end;
ShowMessage(online);
onl:=StrToFloat(online);
off:=0;
if off < onl then
begin
Application.MessageBox ('Ein Update für Ihre Software ist verfügbar.','Versionstest',0+64);
Edit5.Text:='1'
end
else
begin
Application.MessageBox ('Ein Update für Ihre Software ist nicht verfügbar.','Versionstest',0+64);
Edit5.Text:='0';
end; }
end;
procedure TForm4.Edit5Change(Sender: TObject);
begin
if Edit5.Text='
1'
then
Button1.Enabled:=True
else
Button1.Enabled:=False;
end;
procedure TForm4.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Form2.Visible:=True;
end;
procedure TForm4.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
Progress.Position := 0;
end;