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

时间:2009-02-12 01:49:11

标签: delphi

我正在使用Delphi中的MDI应用程序。

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

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

我希望这很清楚。

3 个答案:

答案 0 :(得分:1)

您可以生成其他应用程序,获取与该进程关联的窗口句柄,然后将该窗口句柄的Parent设置为与MDI应用程序中的表单或面板关联的句柄。

查看以下Wi​​n32功能......

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

您可能还需要......

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

如果您正在使用MDI表单,我建议您使用正常的空MDI表单并在取出边框内显示您的dll表单,如下所示:

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

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