【发布时间】:2011-07-12 21:08:12
【问题描述】:
我有一个 .NET 4 WinForm 应用程序,它显示来自 Delphi 7 .dll 的表单。昨天我有一些关于如何让 Delphi 表单在模态显示时正确运行的问题。已回答here。
我从 Delphi .dll 导出一个方法,该方法创建 Delphi 表单的一个实例,将指向该表单的指针返回给 .NET。我还导出了一个方法来显示 Delphi 表单。 Show方法有两个参数:integer类型的owner;和指针类型的形式。
我调用 CreateForm 方法,该方法创建 Delphi 表单,将 Delphi 的 Application 对象传递给表单的构造函数。我将返回的指针存储在 .NET 中。然后我调用 Show 方法,传递来自 .NET 应用程序主窗体的句柄和 Delphi 窗体的指针。
然后我将该句柄分配给 Delphi 的 Application.Handle 属性。
这解决了我原来的问题。
现在我还有一些其他问题:
Delphi 表单在 Windows 任务栏上显示一个按钮。到目前为止,我发现抑制任务栏按钮的唯一方法是将 Delphi 表单创建为工具窗口(通过设置表单的
BorderStyle := bsToolWindow或将WS_EX_TOOLWINDOW分配给表单的样式)。我需要 Delphi 表单是一个普通样式的表单,但我不希望工具栏按钮显示,类似于子表单在本机 Delphi 或 .NET 应用程序中的行为方式。本地是指整个应用程序是用给定语言编写的。当 .NET 应用程序最小化时,Delphi 表单不会最小化。当 .NET 应用程序的主窗体最小化时,我需要 Delphi 窗体最小化,类似于子窗体在本机 Delphi 或 .NET 应用程序中的行为。
我不确定,但这确实像是所有权问题。似乎 Delphi 表单并不“知道”它们是 .NET 应用程序的一部分。
所以我的基本问题是:如何让 Delphi 表单表现得好像它们是应用程序的本机表单?
进一步考虑:我在 Windows 7 上开发,但应用程序也需要在 XP 和 Vista 上表现相同。
【问题讨论】: