以下是完整的代码:
procedure TForm1.btnFileClick(Sender: TObject);
begin
   if (FileStream = nil) and OpenDialog.Execute then
   begin
      FileStream := TFileStream.Create(OpenDialog.FileName,fmOpenRead);
      MemStream  := TMemoryStream.Create;      MemStream.Size := FileStream.Size;
      CopyData(AudioPlayer.NumBuffers*AudioPlayer.BufferSize);      AudioPlayer.FileName    := 'POINTER://'+IntToHex(Longint(MemStream.Memory),8);      SliderPosition.MaxValue := AudioPlayer.FileLength;
      SliderPosition.Position := 0;
      btnPlay.Enabled         := True;
   end;
end;其中
      AudioPlayer.FileName    := 'POINTER://'+IntToHex(Longint(MemStream.Memory),8);
这句我改为AudioPlayer.FileName := 'c:\windows\hello.mp3'也行,也就是说fileName要求输入含路径的文件名即可。可上述代码是什么意思呢?另:
AudioPlayer是一个可以播放wav,MP3等文件的vcl

解决方案 »

  1.   

    还丢了一段,代码中的copydata定义如下:
    procedure TForm1.CopyData(nBytes: Longint);
    begin
       try
          nBytes := Min(nBytes,FileStream.Size-FileStream.Position);
          MemStream.CopyFrom(FileStream,nBytes);
       except
          // no exception please
       end;
    end;
      

  2.   

    过了好久了,我刚好见到了这个控件.
    可惜我的控件是FOR DELPHI3的,我没法在D5里用.源码太多,我只看了一点,所以也不太清楚.
    基本上,你可以跟一下SETFILENAME,这里面对文件名作检查,如果是视频文件就将其读入内存.上面的例子先将文件读入内存,再将内存地址赋给文件名,效果应该是一样的. 'POINTER://'这个符号应该是他自己定义的,表示后面是指向内存的指针.这样做的好处,我想就是可以直接指定内存而不需要文件名,比如你以自己的数据结构存储的视频数据,可以读入内存然后播放.
    以上的意见不知能不能给你一点帮助.
      

  3.   

    我已经大致清楚了这个语句的含义。这应该是构件作者自己定义的一种用法。即fileName属性既可指向磁盘上文件名,又可指向内存中的流。我手头既没有帮助文件,也没有构件的源代码,所以一时没有明白含义。
    我用的MMTools构件组是1.08版的,既无帮助文件,又没有源代码,你的源码是从哪里下的?
      

  4.   

    从同事哪儿来的,你可以到http://www.torry.net/看看,这里很多控件,可能有吧.