Как мне создать дочернее окно MDI из DLL Delphi 5 ActiveX и встроить его в родительский компонент MDI Delphi XE?

Есть ли способ создать дочернее окно MDI из библиотеки DLL ActiveX, написанной на Delphi 5, и встроить его в родительское окно MDI, созданное из клиентского приложения Windows Delphi XE? Если нет, есть ли способ имитировать это поведение?

Предпосылки

Существует приложение, полностью написанное на Delphi 5. Основной формой приложения является родительское окно MDI. Все другие формы в приложении являются дочерними формами MDI, и каждая из них создается из библиотеки ActiveX. Родительское приложение создает ActiveX, после чего вызывает метод интерфейса ActiveX. С помощью этого метода создается форма, для которой FormStyle установлено значение fsMDIChild. На данный момент форма является дочерним элементом MDI родительского элемента MDI. Это работает, потому что и приложение, и библиотеки ActiveX скомпилированы с использованием пакетов времени выполнения. В результате все формы используют один и тот же экземпляр TApplication.

Проблема

Приложение очень большое, и его необходимо перенести на Delphi 2010 или Delphi XE. Было бы замечательно, если бы приложение можно было переносить систематически, сначала перенося приложение, а затем мигрируя библиотеки ActiveX по одной (их около 50).

Проблема в том, что если консольное приложение скомпилировано в XE, оно больше не будет использовать тот же экземпляр TApplication, что и библиотеки, все еще скомпилированные в Delphi 5.

Даже если формы в библиотеке ActiveX не могут быть истинными MDI дочерние окна, кажется, я должен иметь возможность вернуть дескриптор формы, созданной из ActiveX, и захватить его из основной формы и сделать форму, чтобы она выглядела как дочерняя MDI. Затем я мог бы создать свой собственный уровень для обработки событий.

Есть идеи?


Обновление: подход, применяемый в настоящее время с этим приложением, заключается в том, что оно переносится с MDI на интерфейс SDI. Вполне возможно создать экземпляры TForms из Delphi 5 ActiveX DLL из приложения Delphi XE, если первая форма из каждой DLL может позаботиться о своих собственных данных (загрузка, сохранение, отображение дополнительных форм, так далее). Проблема заключалась в сохранении первоначального дизайна MDI. Если конструкция SDI окажется приемлемой, решение MDI отпадет. Тем не менее, если кто-то знает, как реализовать решение MDI, я хотел бы знать.

7
задан RRUZ 24 April 2011 в 18:24
поделиться