unit untMusic;interfaceuses
  Classes, SysUtils, Dialogs, Mplayer, forms, ExtCtrls;type
  tMusic = class(TThread)
  private
    { Private declarations }
    MusicList: TstringList;
    MediaPlayer: TMediaPlayer;
    procedure play;
    procedure replay(sender: Tobject);
  public
    constructor Create(AOwner: TComponent);
    destructor destory;
    procedure AddMusic(MusicDir: string);
  protected
    procedure Execute; override;
  end;implementation
{ tMusic }constructor tMusic.Create(AOwner: TComponent);
begin
  MusicList := TstringList.Create;  //
  MediaPlayer := TMediaPlayer.CreateParented(tform(AOwner).handle);
  MediaPlayer.AutoOpen := true;
  inherited Create(false);
end;destructor tMusic.destory;
begin
  MediaPlayer.Close;
  MediaPlayer.Free;
  MusicList.Free;
  inherited;
end;procedure tMusic.AddMusic(MusicDir: string);
var
  SR: TsearchRec;
  findResult: integer;
  FileExt: string;
begin
  if not DirectoryExists(MusicDir) then exit;
  findResult := FindFirst(MusicDir + '*.*', faAnyFile, SR);
  if findResult = 0 then
    repeat
      if SR.Attr <> FaDirectory then
      begin
        FileExt := lowercase(ExtractFileExt(SR.Name));
        if FileExt = '.mp3' then MusicList.Add(MusicDir + SR.Name);
      end;
    until FindNext(SR) <> 0;
  findClose(SR);
end;
procedure tMusic.Execute;
begin
  play;
end;procedure tMusic.play;
begin
  if MusicList.Count < 1 then exit;
  MediaPlayer.FileName := MusicList.Strings[random((MusicList.Count))];
  MediaPlayer.DeviceType := dtAutoSelect;
  try
    MediaPlayer.Open;
    MediaPlayer.Notify := true;
    MediaPlayer.play;
  except  end;
end;procedure tMusic.replay(sender: Tobject);    //这个过程为什么没有执行...
begin
  if MediaPlayer.Position = MediaPlayer.Length then
  begin
    play;
  end;
  MediaPlayer.Notify := true;
end;end.

解决方案 »

  1.   

    没有看到哪里调用了Replay呀?
      

  2.   

    就是,Replay都没有用到啊
    还有你创建对象的顺序好像不对吧,应该是先
    inherited Create(false);
    ……//这里创建自已的对象
      

  3.   

    constructor tMusic.Create(AOwner: TComponent);
    begin
      MusicList := TstringList.Create;  //
      MediaPlayer := TMediaPlayer.CreateParented(tform(AOwner).handle);
      MediaPlayer.AutoOpen := true;
      mediaplayer.OnNotify:=replay;   //少写了一句,,
      inherited Create(false);
    end;但是加上这句,还是不能正常运行啊..
    有时报错,有时又能正常启动,但都不能连续播放..