procedure frmMain.ShowDialog;
var DlgClosed; // global var to detect dialog closure
begin
...
DlgClosed := False;
Enabled := False; // disable form to prevent mouse clicks
frmDialog.show; //(and not showmodal)
repeat
Application.ProcessMessages;
Sleep(20); // prevent 100% cpu
until DlgClosed; // flag must be set by frmDialog (ie OnClose event)
Enabled := True;
...
end;