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