Yan*_*iel 3 delphi firemonkey delphi-xe3
以下内容发生在FireMonkey(Delphi XE3)应用程序中.查看以下代码(这只是一个虚拟示例,用于说明问题):
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
begin
Button4.Enabled:= false; //This should gray-out the button
// get busy for some time
for I := 0 to 100000000000 do
begin
end;
Button4.Enabled:= true;
end;
Run Code Online (Sandbox Code Playgroud)
我希望Button4在进入由"for"循环表示的繁忙操作之前变灰.尽管如此,它没有.
在OnClick处理程序执行结束时,该按钮"似乎没有响应"Button4.Enabled:= false.为什么?
我该如何解决它?
这在VCL中运行得很好.
谢谢.
它没有反应,因为反应只有在按钮自我修复时才能看到.这仅在处理下一个wm_Paint消息时发生,但是您的代码不处理消息,因此按钮以及整个表单在该循环的持续时间内保持不变.
立即修复将是调用Button4.Repaint,这将允许按钮更新其外观.但是,这并不会处理所有消息.
糟糕的解决方法是偶尔Application.ProcessMessages在你的循环中调用,但是需要调用它通常表明你做错了.
最后,最好的解决方法是将长期运行的任务移动到另一个线程中.启动任务时禁用该按钮,并在任务完成时启用它.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |