看到很多的安装程序有这样的窗体:
  打开是一个对话框(dialog),提示“正在复制文件。”
等复制完毕后,对话框消失。
  主要是因为有些存储过程要很长时间,我想来个提示
 还有个要求:窗体不能消失,或者是有其他的阴影

解决方案 »

  1.   

    执行长过程中使用show方法显示出进度窗口,将主窗口设为disable,然后使用一个新的线程刷新进度条
      

  2.   

    对话框无边框(BorderStyle为bsNone),这样就没有标题栏,当然用户就无法按“X”将窗体关闭;或者在BorderIcons里面将所有的标题栏按钮设为false也可以。这样用户无法自己将对话框关闭了。在Unit1中uses Unit2;
    开始复制文件时(假设主窗体为Form1,对话框为Form2),
    Form2.ShowModal;
    //模态化显示,只要Form2不被关闭,用户就无法操作后面的窗体
    ......
    //复制完毕
    Form2.close;注意:Form2的FormStyle必须为fsNormal,visible为false(默认就是这个样子的,不必改)
      

  3.   

    你在执行存储过程后的下一条语句显示一个新的进度窗体
    BorderStyle为bsNone
    里面放进度条
    另外进度窗体在onshow时调用setwindowpos函数
    SetWindowPos(form1.Handle,
                   HWND_TOPMOST,
                   form1.Left,
                   form1.top,
                   form1.Width ,
                   form1.height,
                   SWP_SHOWWINDOW);
      

  4.   

    to oracle_lover(数据库情人) 
      按你的作的话,切换界面后,主窗体(Form1)就剩下标题栏了。
    我要的是无论怎么切换界面,Form1完整存在,只是Form2为焦点窗体
      

  5.   

    form1不用做修改啊
    form2.Show()就可以了.
    象数据库情人所说的那样设为bsNone,
    拷贝文件完毕后就form2.Close()可以了。其中还有些细节自己设置吧
      

  6.   

    大家试一试:
    form2.showmodal;
    sleep(1000000);//在这个时间段里切换界面再看看form1窗体已经不成样字了
    form2.free;
    不行呀,不知道上面的 测试了吗??不知道用线程是否可以做到?
      

  7.   

    这样子的
     form2.show;
     mainform.enabled:=false; 
     //这里调用线程完成任务,包括刷新form2
     //在form2的onclose中写入mainform.enabled:=true;
     //在线程单元中线程结束时写上form2.close;
      

  8.   

    var
      vform1: TForm;
    begin
      try
        vform1 := TForm.Create;
        ......
        {开如初始化窗口}
        vform1.ShowModal;
        .......
        {执行复制的过程}
        Application.ProcessMessages;       
      finally
        vform1.Close;
        vform1.Free;
      end;
    end;
      

  9.   

    楼主,你的意思是不是拷贝文件的时候不允许切换窗体
    如果是的话,可以这样
    form2动态创建以后,把form2.formstyle:=fsstayontop;直到拷贝完关闭窗体就可以了
      

  10.   

    如下,不过没有进程条,需要另做参数发送
    function  ShowAniWait() :Longint;
    begin
      try
        FrmAnimateWaiting.Position := poscreencenter;
      except
        FrmAnimateWaiting := TFrmAnimateWaiting.Create(Application);
      End;
      FrmAnimateWaiting.MessageLabel.Caption  := '正在组织数据,请稍侯...';
      FrmAnimateWaiting.Show ;  if fileexists( extractfilepath(paramstr(0))+'FINDCOMP.AVI') then
      begin
        FrmAnimateWaiting.Animate1.FileName :=extractfilepath(paramstr(0))+'FINDCOMP.AVI';
        FrmAnimateWaiting.Animate1.Active  := true;
      end;
      FrmAnimateWaiting.Update ;
    End;function  ShutAniWait() :boolean;
    begin
      FrmAnimateWaiting.Close ;
    end;调用
    try 
      ShowAniWait;...
    finally
      ShutAniWait
    end;
      

  11.   

    to hgf_hb(酸书生) 
    是要求能够切换界面,
    是而且要界面完整
      

  12.   

    form.Show()就可以了,复制文件结束就free掉这个窗体,不用sleep().
      

  13.   

    软件Flash伴侣源代码中的一段:
      //开始执行打包过程
      //显示进度条
      fmProgress.gauge.Progress:=0;
      fmProgress.Show;
      //将FlashFere.exe先放入内存流中
      ms:=TMemoryStream.Create;
      fs:=TFileStream.Create(efflocation.Text,fmOpenRead or fmShareDenyWrite);
      try
        ms.CopyFrom(fs,0);
      finally
        fs.Free;
      end;
      fmProgress.gauge.Progress:=round(ms.Size*100/totalsize);
      //将其他文件也放入内存流中
      for i:=0 to fnlist.Count-1 do
      begin
        application.ProcessMessages;
        try
          ms.Seek(0,soFromEnd);
          fnList.Strings[i]:=fnList.Strings[i]+'|'+intToStr(ms.Position); //ffindex.swf|23087  这句一定要放在前面
          fs:=TFileStream.Create(fileListBox.Items.Strings[i],fmOpenRead or fmShareDenyWrite);
          ms.Seek(0,soFromEnd);
          ms.CopyFrom(fs,0);
          fnList.Strings[i]:=fnList.Strings[i]+'|'+intToStr(fs.Size);     //ffindex.swf|23087|2512
        finally
          fs.Free;
        end;
        fmProgress.gauge.Progress:=round(ms.Size*100/totalsize);
      end;