【问题标题】:How can I display a window from another process in an MDI window in my application如何在我的应用程序的 MDI 窗口中显示来自另一个进程的窗口
【发布时间】:2009-02-12 21:52:39
【问题描述】:

我正在使用 Delphi 开发 MDI 应用程序。

我想在我的应用程序的 MDI 子窗口中显示由其他应用程序(我也构建)生成的交互式视图。

当用户在我的应用程序中选择特定视图类型时,它将启动另一个应用程序的实例,该实例将生成一个或多个数据视图,显示在我的应用程序的 MDI 子窗口中。

我希望这很清楚。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    您可以生成另一个应用程序,获取与该进程关联的窗口句柄,然后将该窗口句柄的父级设置为与您的 MDI 应用程序中的窗体或面板关联的句柄。

    查看以下 Win32 函数...

    • GetParent(hWnd)
    • SetParent(hWndChild, hWndNewParent)

    您可能还需要...

    • SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags)
    • SetWindowLong(hWnd, nIndex, dwNewLong);
    • GetWindowLong(hWnd, nIndex);

    【讨论】:

      【解决方案2】:

      为什么不写一个 ActiveX 控件呢?它专为此类工作而设计(例如,考虑 Outlook 如何使用 Word 文本编辑器)。此外,通过这条路线,您的应用程序也可以与非 Delphi 应用程序进行交互。您将能够在 MDI 窗口中显示非 Delphi 应用程序,例如 Word 和 Excel,并且您的应用程序将能够在 Word 等非 Delphi ActiveX 主机中显示它们的内容。

      【讨论】:

        【解决方案3】:

        如果您想模块化您的应用程序,我认为最好使用 dll 来定义表单。

        为此,您可以在 dll 或 dpk 中定义表单类,并在从应用程序加载它之后。

        如果您使用的是 MDI 表单,我建议您使用普通的空 MDI 表单,并在去掉边框后显示您的 dll 表单,如下所示:

        DllForm.FormStyle:=fsNormal;
        DllForm.BorderStyle:=bsNone;
        DllForm.Parent := MDIForm;
        DllForm.Align := alClient;
        

        您可以找到here 一篇关于从 dll 加载表单的文章。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          • 1970-01-01
          • 2017-05-11
          • 1970-01-01
          • 2019-05-29
          相关资源
          最近更新 更多