Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我能';不要在Delphi中重新绘制我的表单_Ios_Delphi_Delphi Xe2_Firemonkey - Fatal编程技术网

Ios 我能';不要在Delphi中重新绘制我的表单

Ios 我能';不要在Delphi中重新绘制我的表单,ios,delphi,delphi-xe2,firemonkey,Ios,Delphi,Delphi Xe2,Firemonkey,我正在创建一个Delphi程序,程序中有以下代码: begin if edit1.Text='salam' then begin for i := 1 to 10 do begin progressbar1.Value := progressbar1.Value+1; sleep(100); end; end; end; 我想让progressbar顺利运行。但是这个代码不是那样的。 我该怎么办?我想在睡觉后重新粉刷表格。你应该这样做

我正在创建一个Delphi程序,程序中有以下代码:

begin
  if edit1.Text='salam' then
  begin
    for i := 1 to 10 do
    begin
      progressbar1.Value := progressbar1.Value+1;
      sleep(100);
    end;
  end;
end;
我想让progressbar顺利运行。但是这个代码不是那样的。

我该怎么办?我想在睡觉后重新粉刷表格。

你应该这样做

begin
  if edit1.Text='salam' then
  begin
    progressbar1.Step:=1;
    for i := 1 to 10 do
    begin
      progressbar1.StepIt;
      Application.ProcessMessages;
      Sleep(100);
    end
  end;
end;

Windows需要处理要重新绘制的消息,并且要知道您的应用程序没有被刷新,Application.ProcessMessages就发挥了这一神奇的作用。

您正在GUI线程中执行
睡眠操作(其他所有操作都在该线程中完成)并阻止UI重新绘制。您必须在另一个线程中执行此操作,或者在表单上使用
tid防冻剂
组件。您真正的代码肯定不是在睡眠。你想达到什么目的呢?我想你忘记了在做完后的
开始,以及睡觉后的
结束。“你肯定不想只在设置progressbar1.value的行上循环?@WarrenP阅读了对Cesar答案的评论。我想知道在iOS上睡眠(x)是不是更糟糕的主意。”。可能是的。我还没有进入我的进度栏。我正在创建一个iOS高清应用程序。它重要吗?我还没有为iOS开发任何东西,所以我不确定Application.ProcessMessages是否存在,但如果它不存在,则必须有一个等效的。这在许多方面仍然是错误的。你的代码对于一个愚蠢的演示来说是很好的,但是千万不要在生产环境中编写这样的代码。您几乎不应该在主线程中睡觉,当然也不应该在循环中睡觉。添加Application.ProcessMessages可以解决冻结主窗口消息循环的明显问题,但在大型生产应用程序中可能会导致其他有趣的副作用。@WarrenP是对的,但由于它只是一个简单的进度条,没有必要编写更复杂的代码来完成这项任务。重入性可以允许各种事情发生。例如,进度条可能会被破坏。