Ich leite alle Dialoge immer von einer eigenen Basisklasse ab.
Hier mal ein vereinfachtes Beispiel für diesem Zweck:
Delphi-Quellcode:
TBasicForm = class(TForm)
private
FStart: Int64;
public
procedure AntiFreeze; // ruft nur alle 50ms Application.ProcessMessages;
end;
...
procedure TBasicForm .AntiFreeze;
begin
if FStart = 0 then
FStart := GetTickCount
else
if GetTickCount - FStart > 50 then
begin
FStart := GetTickCount;
Application.ProcessMessages;
end;
end;
50 Millisekunden habe ich gewählt, damit TProgressbar noch einigermaßen flüssig bleibt.
Bei allem was ich neu schreibe, verwendet das aber nicht mehr.