2010-12-10 37 views
7

有沒有辦法從Delphi 5中編寫的ActiveX DLL創建MDI子窗口,並將其嵌入到從Delphi XE Windows客戶端應用程序創建的MDI父窗口中?如果不是,有沒有辦法模仿這種行爲?如何從Delphi 5 ActiveX dll創建MDI子窗口,並將其嵌入到Delphi XE MDI父項中?

背景

有完全在Delphi 5.編寫的應用程序的應用程序的主要形式是MDI父窗口。應用程序中的所有其他表單都是MDI子表單,每個表單都是從ActiveX庫創建的。父應用程序創建ActiveX,之後調用ActiveX接口的方法。從這個方法創建一個表單,它的FormStyle被設置爲fsMDIChild。此時,表單是MDI父級的MDI子級。這是可行的,因爲應用程序和ActiveX庫都是使用運行時軟件包編譯的。因此,所有表單都共享TApplication的相同實例。

的問題

的應用是非常大的,並且需要被遷移到德爾福2010年或德爾福XE。如果可以系統地遷移應用程序,首先遷移應用程序,然後逐個遷移ActiveX庫(其中大約有50個),那將是非常棒的。

的問題是,如果控制檯應用程序在XE編譯,它將不再使用相同的TApplication的實例作爲這些庫仍然在Delphi編譯5.

即使在ActiveX庫的形式不能真正的MDI子窗口,似乎我應該能夠返回從ActiveX創建的窗體的句柄,並從主窗體中抓取它,並使窗體看起來像一個MDI子窗體。然後,我可以創建自己的圖層來處理事件。

任何想法?


更新:目前與此應用程序正在採取的方法是,它正在從MDI遷移到SDI接口。只要每個DLL的第一個表單可以處理它自己的數據(加載,保存,顯示其他表單等),就可以通過Delphi XE應用程序從Delphi 5 ActiveX DLL實例化TForms。問題在於保持原來的MDI設計。如果SDI設計證明可以接受,則不需要MDI解決方案。不過,如果有人知道如何完成MDI解決方案,我想知道。

+0

也許你可以嵌入形式從在XE應用程序創建MDI子窗體的activex庫...(重新養育的activex形式進入XE實例化的形式 - 不改activex窗體的表單樣式) – 2010-12-10 19:54:15

回答

4

本來我說你不能創造。 我研究了一些,發現可以做到這一點。 你必須非常小心。

這裏的一些源創建我最近測試了這個想法:http://cc.embarcadero.com/item/28168

代碼派生的Windows計算器記事本應用程序,然後MDIize外部窗戶進入MDI窗體。

點擊啓動應用程序後啓動記事本,看看會發生什麼。

您應該能夠進一步修改工作,以便您可以實現所需。

請注意,您需要確保您的ActiveX DLL中的MDI Child是完全獨立的。

+0

VCL是一個坐在Windows API之上的框架。 Delphi窗體本身就是Windows窗口,讓我懷疑它可能,顯然有一些努力,不僅在一個任意窗口中顯示一個Delphi TForm,而且在主窗口和它的嵌入窗口之間使用Windows消息隊列進行通信。這是我正在尋找的。 – 2010-12-15 02:50:34

+0

是的,我知道VCL是一個框架,我是近3年的亞太地區支持......我只是說你不能像現在這樣使用VCL,去做你想做的事情。 – chuacw 2010-12-15 16:04:54

+0

@chuacw:Chee Wee!很久以前:-)歡迎來到這裏。 – 2010-12-16 07:31:00

0

即使在ActiveX 庫的形式不可能是真實的MDI子 窗口,好像我應該 能夠以返回從ActiveX創建 抓住它從形式 的手柄主要的形式和使 的形式似乎是一個MDI的孩子。然後,我可以爲處理事件創建我自己的圖層 。

我會嘗試這樣的事情(由馬裏安的評論啓發):
在Delphi 5 MDI窗口,在兩層分割窗口的每一個形式:

  • 一套無框TForms /具有每個無框內容的內容(可能暴露此作爲ActiveX形式)
  • TFrames,一個MDI子處理該MDI

在Delphi XE主持人:

  • 獲得句柄每個德爾福5無框TForms/TFrames的
  • 嵌入在MDI子窗體處理

這可能意味着你必須複製德爾福5的一部分Delphi XE中的MDI處理。

--jeroen

+0

Jeroen。感謝您的加入!我考慮過Marjan的建議,但它看起來更復雜。我想到XE主窗體應該簡單地抓住Delphi 5窗體的句柄。 Chee Wee所在的項目正是我所懷疑的可以完成的項目。而且他對MDI孩子需要自給自足是正確的。我也想象MDI父母也可以發送消息給MDI孩子。我將接受他對這個特定問題的回答。 – 2010-12-16 13:37:54

+0

@Cary:不客氣。 +1爲chuacw。 – 2010-12-16 15:01:50

相關問題