2009-02-12 93 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)中顯示其內容。

相關問題