2009-02-12 53 views
1

我正在使用Delphi的MDI应用程序。如何在我的应用程序的MDI窗口中显示另一个进程的窗口

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

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

我希望这很清楚。

回答

1

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

看看下面的Win32函数...

  • 的getParent(HWND)
  • 的setparent(hWndChild,hWndNewParent)

您可能还需要...

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

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

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

如果您正在使用MDI窗体工作,我建议你使用普通的空MDI的形式和展示里面取出边界您的DLL的形式,这样的:

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

您可以找到here有关加载形式的文章从一个DLL。

1

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

相关问题