У меня есть два проекта, которые работают как отдельные процессы, но принадлежат одному и тому же приложению:
- Мастер (содержит
TMasterMainForm
иTMasterModalForm
) - Раб (содержит
TSlaveForm
)
Типичный способ использования этого приложения выглядит следующим образом:
- Мастер запускается и показывает файл
TMasterMainForm
. - Пользователь может запустить ведомое устройство, нажав кнопку в
TMasterMainForm
. - Master запускает процесс Slave.
- Ведомый показывает
TSlaveForm
. - Мастер отправляет
TForm.Handle
изTMasterMainForm
подчиненному. (через IPC = WM_COPYDATA)
Шаг 5 сделан для того, чтобы при закрытии Ведомого он мог установить окно переднего плана обратно на TMasterMainForm
. Это сделано для улучшения пользовательского опыта.
Это работало нормально, пока мы не представили TMasterModalForm
.
TMasterModalForm
можно запустить с помощью другой кнопки в TMasterMainForm
. Это отдельное окно, но оно отображается как модальное и имеет TMasterMainForm
в качестве явного родителя всплывающего окна.
Теперь, когда TSlaveForm
закрывается, подчиненное приложение вызывает SetForegroundWindow
на дескрипторе TMasterMainForm
, но это больше не правильно, так как поверх него находится модальная форма (TMasterModalForm
).
Итак, вопрос:
Как мне установить окно переднего плана в этой нетривиальной ситуации?
PS: Это упрощенное описание, реальное приложение также делает это окно переднего плана наоборот.
Application.BringToFront
было бы более естественным? - person David Heffernan   schedule 22.02.2012