这是下载的线程
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时能正确下载  不知道为什么