Um exemplo disso é quando você está mostrando um diálogo do
progresso de uma operação.
O problema é que se você usa ShowModal todo o código da
operação deve estar contido no form do diálogo de progresso.
Para evitar
isso use DisableTaskWindows and EnableTaskWindows.
Desta form seu diálogo vai agir como um formulário Modal e
ao mesmo tempo permite executar o form da operação que está em progresso no
diálogo.
procedure
TForm1.ShowProgressDlg;
var
WindowList:
Pointer;
begin
// Desabilita todos os formulários com exceção de
FrmProgress
WindowList
:= DisableTaskWindows(FrmProgress.Handle);
try
FrmProgress.Show;
// Início do loop que executa a operação
FrmProgress.ProgressBar1.Position
:= FrmProgress.ProgressBar1.Position + 1;
// Fim do loop
finally
// Reabilita todos os formulários
EnableTaskWindows(WindowList);
FrmProgress.Close;
end; // try
end; // ShowProgressDlg