做一个拷贝文件的程序,用一窗体显示拷贝进度,做拷贝的过程中写如下代码:
begin
  progressfrom := Tprogressfrom.Create(MainForm);
  progressfrom.ShowModal;
  //处理过程(略);
  progressfrom.Free;问题是这样的:ShowModal方式时,处理过程停止,关闭窗体后,程序继续,
             Show方式时,显示进度的这全窗体,不响应任何事件,上面按钮无法   
            按下,但程序继续进行,不会中断.

解决方案 »

  1.   

    让那个 ProgressForm.Show 就可以了,不需要使用线程那么复杂。
      

  2.   

    处理过程放到progressform中,用程序调用其过程。如果在显示拷贝进度时,需要使用其它的窗体,那就需要创建到线程了。
      

  3.   

    试试我下面的方式:
    procedure TForm1.button1Click(Sender: TObject);
    var
     FileOpStruct :TSHFileOpStruct;
     Buf1 :array [0..127] of Char;
     Buf2 :array [0..127] of Char;
     Str1,Str2 :String;
    begin
     Str1 :='E:\休闲书屋11.rar';
     Str2 :='E:\gz\休闲书屋11.rar';
     FillChar(Buf1,SizeOf(Buf1),0);
     FillChar(Buf2,SizeOf(Buf2),0);
     StrPCopy(Buf1,Str1);
     StrPCopy(Buf2,Str2);
     with FileOpStruct do
     begin
       Wnd :=Handle;
       wFunc :=FO_copy;
       pFrom :=@Buf1;
       pTo :=@Buf2;
       fFlags :=FOF_SIMPLEPROGRESS;
       //fFlags :=FOF_ALLOWUNDO;
       //fFlags :=FOF_NOCONFIRMMKDIR;;   fAnyOperationsAborted :=false;
       hNameMappings :=nil;
       lpszProgressTitle :='复制文件';
     end;
     SHFileOperation(FileOpStruct);
    end;
      

  4.   

    对,用show就好了,看样子你是资都被占了所以按钮没相应,
    还有你用showmodel应该也是没有响应的!!!不用好了
      

  5.   

    如果你需要响应的话,最简单的
    加上:
    application.progress;
      

  6.   

    用show, 再將 progressfrom.FormStyle := fsStayOnTop;
    不就行了??搞線程, 小題大作的感覺!!!
      

  7.   

    如果你需要响应的话,最简单的
    加上:
    application.progress;