У меня есть приложение .NET 4 WinForm, которое отображает формы из Delphi 7 .dll. У меня вчера было несколько вопросов о том, как заставить форму Delphi вести себя правильно, когда она отображается модально. Ответили здесь .
Я экспортирую метод из Delphi .dll, который создает экземпляр формы Delphi, возвращая указатель на эту форму в .NET. Я также экспортирую метод для отображения формы Delphi. У метода Show два параметра: владелец типа integer; и форма типа указатель.
Я вызываю метод CreateForm, который создает форму Delphi, передавая объект приложения Delphi конструктору формы. Я храню возвращенный указатель в .NET. Затем я вызываю метод Show, передавая дескриптор из основной формы приложения .NET и указатель на форму Delphi.
Затем я назначаю этот дескриптор свойству Delphi Application.Handle
.
Это решило мою первоначальную проблему.
Теперь у меня есть некоторые другие проблемы:
В форме Delphi отображается кнопка на панели задач Windows. Единственный способ, который я нашел для подавления кнопки панели задач, - это создать форму Delphi как окно инструментов (либо установив BorderStyle := bsToolWindow
формы, либо присвоив WS_EX_TOOLWINDOW
стилю формы). Мне нужно, чтобы форма Delphi была обычной формой стиля, но я не хочу, чтобы кнопка панели инструментов показывала, подобно тому, как ведут себя дочерние формы в нативном приложении Delphi или .NET. И под родным я имею в виду, где все приложение написано на данном языке.
Форма Delphi не минимизирует время сверки приложения .NET. Мне нужны формы Delphi, чтобы свести к минимуму, когда основная форма приложения .NET свернута, подобно тому, как ведут себя дочерние формы в собственном приложении Delphi или .NET.
Я не уверен, но это похоже на проблему собственности. Похоже, что формы Delphi не «знают», что они являются частью приложения .NET.
Итак, мой основной вопрос: как заставить формы Delphi вести себя так, как если бы они были нативными формами приложения?
Дополнительные соображения: я занимаюсь разработкой под Windows 7, но приложение должно вести себя одинаково на XP и Vista.