Form1.show;
for i:=1 to count 
begin
  form1.progressbar1.position:=i;
  form1.progressbar1.refresh;
end  

解决方案 »

  1.   

    >>for i:=1 to count
    ? do呢?
      

  2.   

    Form1.show;
    form1.progressbar1.value=count;
    for i:=1 to count 
    begin
      form1.progressbar1.position:=i;
      form1.progressbar1.refresh;
    end
      

  3.   

    procedure TForm1.FormPaint(Sender: TObject);
    var
      I: Integer;
    begin
      for I := 0 to ProgressBar1.Max do
      begin
        ProgressBar1.Position := I;
        // 为了增强效果,加了下面这行
        Sleep(10);
        Cursor := crHourGlass;
      end;
      Cursor := crDefault;
    end;
      

  4.   

    for i:=1 to count 
    begin
      form1.progressbar1.position:=i;
      application.processmessages;
    end
      

  5.   

    procedure TForm1.FormPaint(Sender: TObject);
    var
      I: Integer;
    begin
      for I := 0 to ProgressBar1.Max do
      begin
        ProgressBar1.Position := I;
        // 为了增强效果,加了下面这行
        Sleep(10);
        Cursor := crHourGlass;
      end;
      Cursor := crDefault;
    end;
      

  6.   

    我的for 循环是一个费时很长的循环 (大概要1小时以上) 没法用以上方法实现。 用以上方法一旦进入了之后就
    无法对窗口中对象进行操作!!!!、更怪的是连窗口中的label1.caption 的文本也无法显示,我用线程实现也不成, 我在线程的execute 中加入form1.visible:=ture;  然后在for 循环前加入mythread:=Tmythread.create(true);   也无法同步显示窗口。请问高手如何解决。
      

  7.   

    线程中应该在syna...的同步里面进行界面的刷新。
      

  8.   

    用线程解决,重载 Execute 方法,关于 VCL 的刷新用 Synchronize 进行线程同步。
    切记,不能把让主线程很忙的代码放在主线程中,否则主线程根本无法响应你的同步刷新。
      

  9.   

    for i:=1 to count 
    begin
      form1.progressbar1.position:=i;
    ........................
      application.ProcessMessages;  //不用线程,加入此句即可。
    end  
      

  10.   

    线程中用Synchronize(updateform)对界面进行刷新,
    --for 中先用progressbar.update再用application.progressmessage一般可以解决问题
      

  11.   

    加入
      application.ProcessMessages;
      

  12.   

    mythread:=Tmythread.create(false);
    for i:=1   to   verylargecount   do
    begin
    ..........................
    end ; 
    以上for i:=1.....为主线程,
    我在程序调试的时候发现程序先进入for 中执行,执行完后然后再进入线程mythread 中执行,我在execute中用了Synchronize也是如此。我想在mythread 中显示调用窗口form1 显示for i:=1 to verylargecount 的循环进度。form1.processbar1.position:=i    等for 执行完了我再统计进度已经没有意义。  请问以上是为什么?????
      

  13.   

    mythread:=Tmythread.create(false);
    for i:=1   to   verylargecount   do
    begin
    ..........................
    end ; 
    以上for i:=1.....为主线程,
    我在程序调试的时候发现程序先进入for 中执行,执行完后然后再进入线程mythread 中执行,我在execute中用了Synchronize也是如此。我想在mythread 中显示调用窗口form1 显示for i:=1 to verylargecount 的循环进度。form1.processbar1.position:=i    等for 执行完了我再统计进度已经没有意义。  请问以上是为什么?????
      

  14.   

    所谓的主线程即是操作系统分配给应用程序的进程。线程与主线程间是异步运行的,加上线程对VCL的调用是不安全的,所以增加线程与主线程的同步,即等待主线程来刷新等等。