Title: I'm in a loop and my app is not responding. What do I do?
Problem:
You're processing data in a loop and you expect to have any of the following happen:
- Response to a mouse-click (on a button or elsewhere).
- Draw something on the screen.
- Change a label.
- Change a mouse pointer.
But the program won't respond or do any of the above.(There may be other actions as well...)
Solution:
Add the line:
Application.ProcessMessages;
to your program, somewhere in the loop. This will give Windows a chance to process any messages for your application.
However, this can/will also slow processing in your loop. If speed is an issue, you can also include a counter and only call ProcessMessages every so many iterations through the loop. Something like this (i is an Integer variable):
If i = 100 then
begin
Application.ProcessMessages;
i := 1;
end
else
inc(i);