好像dephi自带的多媒体控件就可播放avi文件!

解决方案 »

  1.   


    你可以用win32页的TAnimate控件.
      

  2.   

    感谢heifei,还有问题:
      我要在显示copyfile.avi的同时作拷贝处理,为什么copyfile.ave没有动起来?   
      

  3.   


    什么叫'为什么copyfile.ave没有动起来?'
      

  4.   

    copyfile.avi 就是平常拷贝文件时windows显示的那个动画,我现在做一个程序是从局域网中拷贝文件,同时显示文件拷贝动画,可是该动画就是不动。是不是它得不到cpu时间?
      

  5.   


    这个动画你可以在commandavi属性栏里选取'avicopyfiles'
    当active属性为true时动画启动.
      

  6.   


    停止用stop方法.时间你自己控制.
      

  7.   

    我照做了,还是不行。但是当显示该avi文件时不干别的事情(拷贝文件)时,动画是动的
    是不是它得不到cpu时间?该如何通知TAnimate控件画?
      

  8.   


    delphi 里面的 mediaplayer ,就可以的。
      

  9.   

    在进行拷贝命令发出之前,运行一句Application.ProcessMessages试一试。
      

  10.   

    有一个api可以做和windows一样的文件拷贝动画,你自己查。
      

  11.   


    你在现实前做一个copyfile.avi的副本,用副本显示动画行吗?
      

  12.   


    应该没有问题,
    在下面的程序里,播放delphi自带的\Borland\Delphi5\Demos\Coolstuf\SpeedIs.avi同时
    点击BtnCopy健也能正常拷贝.procedure TForm2.BtnCopyClick(Sender: TObject);
    var
        CopyBuffer: Pointer; { buffer for copying }
        BytesCopied: Longint;
        Source, Dest: Integer; { handles }
    const
      ChunkSize: Longint = 32768;
    begin
        GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
         Source := FileOpen('C:\Program Files\Borland\Delphi5\Demos\Coolstuf\SpeedIs.avi', fmShareDenyWrite); { open source file }
         Dest := FileCreate('C:\TmpFile.avi'); { create output file}
         repeat
          BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }
          FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }
         until BytesCopied < ChunkSize; { until we run out of chunks }
         FileClose(Dest); { close the destination file }
         FreeMem(CopyBuffer, ChunkSize);
    end;procedure TForm2.FormCreate(Sender: TObject);
    begin
      mediaplayer1.FileName:= 'C:\Program Files\Borland\Delphi5\Demos\Coolstuf\SpeedIs.avi';
      mediaplayer1.Display:= Panel1; {speccifies display window}
      mediaplayer1.Open;
    end;代码中没有异常处理.
      

  13.   

    一样的用法.比如播放相同目录下的cool.avi:
    procedure TForm2.BtnCopyClick(Sender: TObject);
    var
        CopyBuffer: Pointer; { buffer for copying }
        BytesCopied: Longint;
        Source, Dest: Integer; { handles }
    const
      ChunkSize: Longint = 32768;
    begin
        GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
         Source := FileOpen('C:\Program Files\Borland\Delphi5\Demos\Coolstuf\Cool.avi', fmShareDenyWrite); { open source file }
         Dest := FileCreate('C:\TmpFile.avi'); { create output file}
         repeat
          BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }
          FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }
         until BytesCopied < ChunkSize; { until we run out of chunks }
         FileClose(Dest); { close the destination file }
         FreeMem(CopyBuffer, ChunkSize);
    end;procedure TForm2.FormCreate(Sender: TObject);
    begin
      Animate1.FileName:= 'C:\Program Files\Borland\Delphi5\Demos\Coolstuf\Cool.avi';
      Animate1.Active:= True;
    end;
      

  14.   

    还是不行:
       单纯的只是显示该avi文件时就可以,但是一拷贝文件(比如说1000个文件)的时候动画根本就不动。any way thanks
      

  15.   


    把你的代码贴出来吧,
    我用上面的程序一边拷贝win98,一边显是aviCopyFiles都没问题.
      

  16.   

    噢我找到了在system面板上
    谢谢各位我准备把这个帖子结了