Ваше решение вполне разумно.У меня есть надстройка Excel COM, которая делает что-то очень похожее.В этом коде я установил Application.Handle в DLL как дескриптор главного окна Excel.Это аналогично тому, что вы делаете.
Проблема в том, что вам нужно правильно установить владельца окна.Вам нужна цепочка владения, чтобы вернуться к основной форме вашего приложения.Формы в DLL не знают, что такое основная форма, и поэтому вы должны предоставить эти знания.
Обратите внимание, что я говорю о концепции владельца окна, используемой в Windows, а не о концепции VCLвладелец, который совершенно другой.В терминологии VCL это известно как родитель всплывающего окна, и вы можете решить свою проблему, явно указав родительский файл всплывающего окна формы DLL в качестве основной формы.Соответствующими свойствами являются PopupMode и PopupParent.Для форм, которые живут в основном приложении, VCL естественным образом сделает их родителем всплывающего окна главной формой.
Однако, поговорив об явной установке родителя всплывающего окна, я бы подчеркнул, что ваше текущее решение проще и болееудобно.
Что оба эти решения делают, чтобы убедиться, что все вспомогательные формы принадлежат основной форме.Это означает, что эти формы всегда находятся над основной формой.Это означает, что вспомогательные формы будут минимизированы, если основная форма минимизирована.Прочитайте о собственных окнах здесь: Особенности окна .
Кстати, если бы вы использовали пакеты времени выполнения, а не DLL, код в пакете был бы подключен к тому же VCL, что и основнойформа.Таким образом, упакованный код сможет увидеть основную форму и правильно установить владельца окна.Это, безусловно, одно из преимуществ использования пакетов.Конечно, вполне может быть веская причина, по которой вам нужно использовать библиотеки DLL, а не пакеты.