本帖最后由 dgtfn 于 2009-08-08 01:46:13 编辑

解决方案 »

  1.   

    ProgressBar1.Min:=0;    ProgressBar1.Max:=700; 
          for  i:=1  to  700  do 
              begin 
                  //这里加一句 
                  if ProgressBar1.Position>=2  then 
                  begin 
                  SendMessage('提示内容'); break ;跳出循環
                    end; 
                  ProgressBar1.Position:=i; 
                  Application.ProcessMessages; 
                  sleep(10); 
              end; 
      

  2.   

    你这个问题这样的:1、你说弹出OK后点击确定就不动了;事实上还在动,因为你声明的进度最大值得(ProgressBar1.Max:=700),你在进度2开始判断(ProgressBar1.Position>=2),也就是说你需要再点击699次这个进度条才能走到最后的刻度,所以你感觉它不动了;如果你去掉showmessage后,很快也会走完,只是你的sleep时间比较长,如果再去掉sleep的话,不到1秒应该就走完整个刻度。2、你要求的功能是:不想出现提示框,返回值写在form2.ShowModal指向预留的第二个窗体
      A、不想出现提示框,直接去掉整个判断就oK啦,就是把下面这个去掉
          if ProgressBar1.Position>=2  then 
         begin 
           SendMessage('提示内容'); //这个能编译通过吗?除非你是自定义的函数;
         end;
      
      B、返回值写在form2.ShowModal指向预留的第二个窗体?
         你说的这个比较模糊,第二个窗体的什么上呢,普通变量、数组、ProgressBar、...?
         那就当是另一个窗体的普通变量吧(不管是什么,方法类似);
        假如第二个窗体的Public下声明的一个变量:FPosition,那么代码如下:
          procedure TForm1.Button1Click(Sender: TObject);
          var
           I:integer;
           Frm2: TForm2;
          begin
            ProgressBar1.Min:=0;
            ProgressBar1.Max:=700;        Frm2 := TForm2.Create(nil);
            try
                for  i:=1  to  700  do
                begin
                    //这里加一句
                    if ProgressBar1.Position >= 2  then
                    begin
                      //showmessage('提示内容');
                      Frm2.FPosition := ProgressBar1.Position;
                      //这个没有显示第二个窗体
                    end;                ProgressBar1.Position:=i;
                    Application.ProcessMessages;
                    sleep(1);
                end;        finally
              FreeAndNil(Frm2);
            end;
          end;如果还有其他问题,欢迎继续讨论!