【问题标题】:How can I assign a .NET 4 WinForm application to the owner property of a Delphi 7 form?如何将 .NET 4 WinForm 应用程序分配给 Delphi 7 表单的所有者属性?
【发布时间】:2011-07-12 02:11:35
【问题描述】:

我需要将 .NET 4 Winform 应用程序指定为 Delphi 7 表单的所有者。

我在 Delphi 中创建了一个包含表单的 .dll。 Delphi .dll 导出创建和显示表单的方法。

我已在我的 .NET 应用程序中成功加载了 Delphi .dll,并显示了表单。

现在我需要能够将 .NET 应用程序(或 .NET 应用程序的主窗体)指定为 Delphi 窗体的所有者。

我之前创建了一个 Delphi 应用程序,它通过 COM 与 .NET 互操作,并使用以下类将 Delphi 应用程序指定为 .NET 表单的所有者:

public class WindowHandleWrapper : IWin32Window
{
    public HandleRef m_Handle;

    public IntPtr Handle
    {
        get
        {
            return m_Handle.Handle;
        }
    }

    public WindowHandleWrapper(IntPtr handle)
    {
        m_Handle = new HandleRef(this, handle);
    }
}

Delphi 应用程序句柄作为整数传递给WindowHandleWrapper 构造函数。

我怀疑解决方案会是类似的,例如将句柄作为整数传递给 Delphi。但是,窗体的 Owner 属性的 Delphi 类型是 TComponent。我只是不确定如何将 .NET 句柄分配为 Delphi 表单的所有者。

有什么想法吗?

【问题讨论】:

  • MyForm := TMyForm.Create(Application) 有什么问题?
  • 也许 OP 在 Owner 和 parent 之间混淆了......@Welton,我不得不问,为什么你希望 .NET winform 成为 owner 而不是 父级?
  • 这些原因与所有者无关,用 Delphi 术语来说。你是说家长。 +1 @jachguate
  • @TOndrej 我认为表单根本不想成为父母。 OP 想要一个不会出现在任务栏中的顶级窗口。和模态形式。问题是您需要禁用 .net 应用程序中的表单。
  • 是的,看了他的评论,也许他只需要将winform句柄分配给Delphi的Application.Handle即可。

标签: c# .net delphi interop


【解决方案1】:

将您的 WinForm 句柄作为参数传递给 DLL,并在创建和显示表单之前将其分配给 Application.Handle

【讨论】:

  • 这正是我想要的。很抱歉造成混乱。
  • 从 DLL 显示 Delphi 表单是一个非常古老的技巧。很高兴它对你有所帮助,干杯。
  • 我参与了一个项目,该项目广泛使用这种技术作为模块化应用程序的一种方式。每个 dll 本身实际上就是一个应用程序。所有表单都以全屏模式运行,并且某些 UI 元素已标准化,因此它看起来像是一个基于用户操作动态更新的表单。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2018-08-09
  • 2022-06-23
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多