这是下载的线程
unit thread;interfaceuses
Classes,IdHTTP,SysUtils,Windows,Forms;type
THttpDownLoad = class(TThread)
Private
{ Private declarations }
FFileName :String;
FURLPath :String;
FFilePath :String;
protected
procedure Execute; override;
public
function GetURLFileName(aURL: string): string;
constructor Create(FileNamePath,URLPath :String);
property FileName :String read FFileName;
end;
var
AStream :TFileStream;
AHttpDownLoad :TIdHTTP;
implementation
uses fm_main;constructor THttpDownLoad.Create(FileNamePath,URLPath :String);
begin
inherited Create(false);
FFilePath := FileNamePath;
FURLPath := URLPath;
end;procedure THttpDownLoad.Execute;begin
FreeOnTerminate:=true;
AHttpDownLoad := TIdHTTP.Create(nil);
AHttpDownLoad.OnStatus := Form1.IdHTTP1Status;
AHttpDownLoad.OnWork := Form1.IdHTTP1Work;
AHttpDownLoad.OnWorkBegin := Form1.IdHTTP1WorkBegin;
AHttpDownLoad.OnWorkEnd :=Form1.IdHTTP1WorkEnd;
FFileName := GetURLFileName(FURLPath);
FFileName := FFilePath + '\' + FFileName;
if FileExists(FFileName) then
begin
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Edit2.Enabled := True;
Form1.Button10.Enabled := False;
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'要下载的目标文件已存在!下载过程停止!');
AStream.Free;
AHttpDownLoad.Disconnect;
MessageBox(handle,PChar('要下载的目标文件在本地磁盘中已存在!'),'提示',MB_OK+MB_ICONINFORMATION);
Exit;
end
else
try
AStream := TFileStream.Create(FFileName,fmCreate);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'我在创建文件!');
except
Form1.ProgressBar2.Position := Form1.ProgressBar2.Min;
MessageBox(handle,PChar('创建文件失败!'),'提示',MB_OK+MB_ICONINFORMATION);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'创建文件失败,文件名为空、非法或者卷标错误!下载过程停止!');
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Button10.Enabled := False;
AStream.Free;
AHttpDownLoad.Disconnect;
Form1.IdHTTP1.Disconnect;
Exit;
end;
AHttpDownLoad.Request.ContentRangeStart := 0;
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'联网赋初值0!');
try
//if AHttpDownLoad.Connected = True then
AHttpDownLoad.Get(FURLPath,AStream);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'确定下载路径文件流!');
except
// Form1.ProgressBar2.Position := Form1.ProgressBar2.Min;
MessageBox(handle,PChar('网络不通或者网络路径不正确!'),'提示',MB_OK+MB_ICONINFORMATION);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'网络不通或者网络路径不正确!下载过程停止!');
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Button10.Enabled := False;
AStream.Free;
AHttpDownLoad.Disconnect;
Form1.IdHTTP1.Disconnect;
end;
end;function THttpDownLoad.GetURLFileName(aURL: string): string;
var
i: integer;
s: string;
begin
s := aURL;
i := Pos('/', s);
while i <> 0 do
begin
Delete(s, 1, i);
i := Pos('/', s);
end;
Result := s;
end;end.
这是主线程的下载按钮下的事件
procedure TForm1.Button5Click(Sender: TObject); //下载
begin
if (Edit2.Text = '') or (Edit3.Text = '') then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'路径为空或者不正确!请重新设置');
Exit;
end
else
if GetMusicFormat(GetURLFileName(Edit2.Text)) <> 'mp3' then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载的歌曲格式不是MP3!请重新选择文件下载!');
Exit;
end
else
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'准备开始下载,请稍后...');
Button10.Enabled := True;
SpeedButton1.Enabled := False;
Button5.Enabled := False;
Edit2.Enabled := False;
Edit3.Enabled := False;
HttpDownLoad := THttpDownLoad.Create(Edit3.Text,Edit2.Text);
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'转入线程下载!');
end;
end;
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'workbegin');
ProgressBar2.Max := AWorkCountMax;
ProgressBar2.Min := 0;
ProgressBar2.Position := 0;
end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'work');
ProgressBar2.Position := AWorkCount;
end;
procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
var
i : integer;
FFileName : String;
name : string;
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'workend');
if ProgressBar2.Position = ProgressBar2.Max then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载完成!');
Memo1.Lines.Add(DateTimeToStr(Now)+': '+ Edit2.Text + '!');
AStream.Free;
AHttpDownLoad.Disconnect;
Button5.Enabled := True;
Edit2.Enabled := True;
Edit3.Enabled := True;
SpeedButton1.Enabled := True;
Button10.Enabled := False;
FFileName := HttpDownLoad.GetURLFileName(Edit2.Text);
if Mp3List.Count > 0 then //加载下载的歌曲
begin
for i := 0 to (Mp3List.Count - 1) do
begin
if DeleteXuHao(ListBox1.Items.Strings[i]) = FFileName then
begin
//Application.MessageBox('添加失败!下载的歌曲已存在于播放列表中!','提示!',MB_OK);
Exit;
end;
end;
end;
ListBox1.Items.Add(inttostr(Mp3List.Count + 1) + '.' + FFileName);
Mp3List.Add(inttostr(Mp3List.Count + 1) + '.' + Edit3.Text + '\' +FFileName);
Mp3List.SaveToFile(ExtractFilePath(Application.ExeName)+'Mp3List.text');
ListBox1.ItemIndex := (ListBox1.Items.Count - 1);
HttpDownLoad.Free;
// Application.MessageBox('已将下载歌曲添加到播放列表中!','提示!',MB_OK);
Exit;
end
else
begin
name := (Edit3.Text + '\' + FFileName) ;
ProgressBar2.Position := ProgressBar2.Min;
Application.MessageBox('下载失败!','提示!',MB_OK);
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载失败!');
DeleteFile(name);
AStream.Free;
AHttpDownLoad.Disconnect;
HttpDownLoad.Suspend;
Button5.Enabled := True;
SpeedButton1.Enabled := True;
Button10.Enabled := False;
end;
end;procedure TForm1.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+AStatusText);
end;
我下载时候有的歌能听有的听不了 显示下载的文件时0kb 但是在用其他下载软件下载同一个MP3时能正确下载 不知道为什么
unit thread;interfaceuses
Classes,IdHTTP,SysUtils,Windows,Forms;type
THttpDownLoad = class(TThread)
Private
{ Private declarations }
FFileName :String;
FURLPath :String;
FFilePath :String;
protected
procedure Execute; override;
public
function GetURLFileName(aURL: string): string;
constructor Create(FileNamePath,URLPath :String);
property FileName :String read FFileName;
end;
var
AStream :TFileStream;
AHttpDownLoad :TIdHTTP;
implementation
uses fm_main;constructor THttpDownLoad.Create(FileNamePath,URLPath :String);
begin
inherited Create(false);
FFilePath := FileNamePath;
FURLPath := URLPath;
end;procedure THttpDownLoad.Execute;begin
FreeOnTerminate:=true;
AHttpDownLoad := TIdHTTP.Create(nil);
AHttpDownLoad.OnStatus := Form1.IdHTTP1Status;
AHttpDownLoad.OnWork := Form1.IdHTTP1Work;
AHttpDownLoad.OnWorkBegin := Form1.IdHTTP1WorkBegin;
AHttpDownLoad.OnWorkEnd :=Form1.IdHTTP1WorkEnd;
FFileName := GetURLFileName(FURLPath);
FFileName := FFilePath + '\' + FFileName;
if FileExists(FFileName) then
begin
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Edit2.Enabled := True;
Form1.Button10.Enabled := False;
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'要下载的目标文件已存在!下载过程停止!');
AStream.Free;
AHttpDownLoad.Disconnect;
MessageBox(handle,PChar('要下载的目标文件在本地磁盘中已存在!'),'提示',MB_OK+MB_ICONINFORMATION);
Exit;
end
else
try
AStream := TFileStream.Create(FFileName,fmCreate);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'我在创建文件!');
except
Form1.ProgressBar2.Position := Form1.ProgressBar2.Min;
MessageBox(handle,PChar('创建文件失败!'),'提示',MB_OK+MB_ICONINFORMATION);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'创建文件失败,文件名为空、非法或者卷标错误!下载过程停止!');
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Button10.Enabled := False;
AStream.Free;
AHttpDownLoad.Disconnect;
Form1.IdHTTP1.Disconnect;
Exit;
end;
AHttpDownLoad.Request.ContentRangeStart := 0;
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'联网赋初值0!');
try
//if AHttpDownLoad.Connected = True then
AHttpDownLoad.Get(FURLPath,AStream);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'确定下载路径文件流!');
except
// Form1.ProgressBar2.Position := Form1.ProgressBar2.Min;
MessageBox(handle,PChar('网络不通或者网络路径不正确!'),'提示',MB_OK+MB_ICONINFORMATION);
Form1.Memo1.Lines.Add(DateTimeToStr(Now)+': '+'网络不通或者网络路径不正确!下载过程停止!');
Form1.Button5.Enabled := True;
Form1.SpeedButton1.Enabled := True;
Form1.Button10.Enabled := False;
AStream.Free;
AHttpDownLoad.Disconnect;
Form1.IdHTTP1.Disconnect;
end;
end;function THttpDownLoad.GetURLFileName(aURL: string): string;
var
i: integer;
s: string;
begin
s := aURL;
i := Pos('/', s);
while i <> 0 do
begin
Delete(s, 1, i);
i := Pos('/', s);
end;
Result := s;
end;end.
这是主线程的下载按钮下的事件
procedure TForm1.Button5Click(Sender: TObject); //下载
begin
if (Edit2.Text = '') or (Edit3.Text = '') then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'路径为空或者不正确!请重新设置');
Exit;
end
else
if GetMusicFormat(GetURLFileName(Edit2.Text)) <> 'mp3' then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载的歌曲格式不是MP3!请重新选择文件下载!');
Exit;
end
else
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'准备开始下载,请稍后...');
Button10.Enabled := True;
SpeedButton1.Enabled := False;
Button5.Enabled := False;
Edit2.Enabled := False;
Edit3.Enabled := False;
HttpDownLoad := THttpDownLoad.Create(Edit3.Text,Edit2.Text);
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'转入线程下载!');
end;
end;
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'workbegin');
ProgressBar2.Max := AWorkCountMax;
ProgressBar2.Min := 0;
ProgressBar2.Position := 0;
end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'work');
ProgressBar2.Position := AWorkCount;
end;
procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
var
i : integer;
FFileName : String;
name : string;
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'workend');
if ProgressBar2.Position = ProgressBar2.Max then
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载完成!');
Memo1.Lines.Add(DateTimeToStr(Now)+': '+ Edit2.Text + '!');
AStream.Free;
AHttpDownLoad.Disconnect;
Button5.Enabled := True;
Edit2.Enabled := True;
Edit3.Enabled := True;
SpeedButton1.Enabled := True;
Button10.Enabled := False;
FFileName := HttpDownLoad.GetURLFileName(Edit2.Text);
if Mp3List.Count > 0 then //加载下载的歌曲
begin
for i := 0 to (Mp3List.Count - 1) do
begin
if DeleteXuHao(ListBox1.Items.Strings[i]) = FFileName then
begin
//Application.MessageBox('添加失败!下载的歌曲已存在于播放列表中!','提示!',MB_OK);
Exit;
end;
end;
end;
ListBox1.Items.Add(inttostr(Mp3List.Count + 1) + '.' + FFileName);
Mp3List.Add(inttostr(Mp3List.Count + 1) + '.' + Edit3.Text + '\' +FFileName);
Mp3List.SaveToFile(ExtractFilePath(Application.ExeName)+'Mp3List.text');
ListBox1.ItemIndex := (ListBox1.Items.Count - 1);
HttpDownLoad.Free;
// Application.MessageBox('已将下载歌曲添加到播放列表中!','提示!',MB_OK);
Exit;
end
else
begin
name := (Edit3.Text + '\' + FFileName) ;
ProgressBar2.Position := ProgressBar2.Min;
Application.MessageBox('下载失败!','提示!',MB_OK);
Memo1.Lines.Add(DateTimeToStr(Now)+': '+'下载失败!');
DeleteFile(name);
AStream.Free;
AHttpDownLoad.Disconnect;
HttpDownLoad.Suspend;
Button5.Enabled := True;
SpeedButton1.Enabled := True;
Button10.Enabled := False;
end;
end;procedure TForm1.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+AStatusText);
end;
我下载时候有的歌能听有的听不了 显示下载的文件时0kb 但是在用其他下载软件下载同一个MP3时能正确下载 不知道为什么
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货