Delphi 如何在应用程序的MDI窗口中显示来自另一个进程的窗口

Delphi 如何在应用程序的MDI窗口中显示来自另一个进程的窗口,delphi,Delphi,我正在Delphi中开发一个MDI应用程序 我想在我的应用程序的MDI子窗口中显示由其他应用程序(我也构建)生成的交互式视图 当用户在我的应用程序中选择特定的视图类型时,它将启动另一个应用程序的实例,该实例将生成显示在我的应用程序的MDI子窗口中的一个或多个数据视图 我希望这是清楚的 您可以生成另一个应用程序,获取与该进程关联的窗口句柄,然后将该窗口句柄的父级设置为与MDI应用程序中的窗体或面板关联的句柄 请检查以下Win32函数 GetParent(hWnd) SetParent(hWndC

我正在Delphi中开发一个MDI应用程序

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

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


我希望这是清楚的

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

请检查以下Win32函数

  • GetParent(hWnd)
  • SetParent(hWndChild,hWndNewParent)
你可能还需要

  • 设置窗口位置(hWnd、HwnInsertafter、X、Y、cx、cy、uFlags)
  • SetWindowLong(hWnd、nIndex、dwNewLong)
  • GetWindowLong(hWnd,nIndex)
      如果您想模块化应用程序,我认为最好使用dll来定义表单

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

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

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

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

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