在程序中使用TListView,显示文件列表,
在copy、delete 时如何显示进度?
要支持多文件删除、copy

解决方案 »

  1.   

    删除、复制文件显示进度,需要使用多线程,在线程创建时计算通过递规算法计算总文件的大小,然后设置为进度条的MAX,然后复制文件时累计复制文件的大小。用线程更新进度条,显示动态图标用anminate控件
      

  2.   

    uses ShellAPI;procedure TForm1.Button1Click(Sender: TObject);
    var FileOp:SHFILEOPSTRUCT;
    begin
      FileOp.Wnd:=0;
      FileOp.wFunc:=FO_COPY; //删除就用FO_DELETE,移动是FO_MOVE
      FileOp.pFrom:='c:\*.*'; //这里改成TListView里的文件
      FileOp.pTo:='c:\temp\';
      FileOp.fFlags:=FOF_ALLOWUNDO;
      SHFileOperation(FileOp);
    end;
      

  3.   

    二楼的方法是拷贝文件夹,调用API,下面的函数可以实现拷贝文件时实时计算进度然后显示在进度条上,效果和速度可能不如直接用API,仅供参考procedure TForm1.CopyFileWithProgressBar(Source, Destination: string);
    var
        FromF, ToF: file of byte;
        Buffer: array[0..4096] of char;
        NumRead: integer;
        FileLength: longint;begin
        AssignFile(FromF, Source);
        reset(FromF);
        AssignFile(ToF, Destination);
        rewrite(ToF);
        FileLength := FileSize(FromF);
        with ProgressBar1 do
        begin
            Min := 0;
            Max := FileLength;
            while FileLength > 0 do
            begin
                BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
                FileLength := FileLength - NumRead;
                BlockWrite(ToF, Buffer[0], NumRead);
                Position := Position + NumRead;
            end;
            CloseFile(FromF);
            CloseFile(ToF);
        end;
    end;
      

  4.   

    to liangqingzhi(老之)
       FileOp.pFrom:='c:\*.*'; //这里改成TListView里的文件
       我试了一下,如果包含中文则会失败
      

  5.   

    因为pFrom,pTo是PAnsiChar,所以出现中文会有问题,当时没想到这点。
    那就用hellolongbin(一个人(看贴先看错别字)) 的方法试试。极品高手高手高高手呵 
    555,好痛苦,回答错会被人这样踩。 T_T
      

  6.   

    一个窗体,通过DBGrid列出数据库的记录,单击某条记录,打开了数据库中存的网页,现在想在关闭该网页后在该窗体执行一些操作。请问,应该怎么做?
    如果能捕获该网页的关闭事件也行啊,但问题是能捕获吗?
    请高手指教。
      

  7.   

    SHFileOperation是不是win NT下不支持?
      

  8.   

    没用过NT,不清楚。
    不过楼主可以改用SHFileOperationW。
    var var FileOp:SHFILEOPSTRUCTW;
    begin
      ......
      SHFileOperationW(FileOp);
    end;
    其中pFrom,pTo是PWideChar的,支持中文,在Xp下可以正常复制。
      

  9.   

    hellolongbin(一个人[年长资深少男][看贴先看错别字]) 好方法!收藏!
      

  10.   

    因为复制文件只是2进制的操作,反正也是要计算总量和当前,直接加几条代码和一个变量就可以实现进度条了.比API(如果有的话)肯定是方便了.至于删除,多文件好说,每个文件的大小做当前,但只有一个文件我真没什么办法,也不想去研究.只是1%秒而已.
      

  11.   

    用SHFileOperation,怎么一起删除、拷贝文件夹,文件?pFrom := ???
    xxxx + #0 + xxxx + #0#0
    好像不行