2012-02-10 105 views
1

我們想從.NET中打開一些Delphi(win32)窗體,並將Delphi窗體嵌入到.NET MDI窗體中。 如果我們只是在我們的Delphi DLL中調用導出的方法,嵌入窗體沒有問題,但是一般來說,我們在快捷方式和鍵盤事件方面都存在問題。我們認爲這是因爲不兼容的消息回覆。 然後我們試着在一個單獨的.NET線程的Delphi DLL中的導出過程中執行Application.Run,​​它第一次工作,但是當我們嘗試多次打開表單時失敗。 有誰知道如何互操作我們想要的方式:在.NET Winform中嵌入win32 Delphi窗體?如何在.NET中嵌入win32 Delphi窗體Winform

@All:首先,感謝您的回覆 我們找到了解決方案:我們將Delphi Application.Run移動到導出過程中,以啓動窗口。

+1

將表單暴露爲activex可以完成這項工作 – 2012-02-10 14:15:58

+0

ActiveX方法意味着您的Delphi應用程序是.Net表單中的控件,而.Net表單將執行窗體級熱鍵窗口消息處理,並且應該比重新安裝到.net窗口的Delphi窗口更好。 – 2012-02-10 16:54:01

回答

0

我可能會在一個單獨的進程中運行Delphi應用程序,將Delphi窗口的父窗口設置爲您的MDI容器(而不是默認值:桌面,由HWND 0引用),並在進程之間編組任何必要的數據使用典型的進程間消息傳遞。

然後,這與將您的表單作爲ActiveX對象公開是基本相同的。我只想採用谷歌瀏覽器的方法,並將窗口/標籤隔離到不同的進程中。

+0

嘿,只因爲它是脖子上的疼痛,對我來說不是完全可行的。 – Zenexer 2012-02-10 14:47:53

+0

不是一個壞主意。但我懷疑這會神奇地讓所有的熱鍵和鍵盤快捷鍵正常工作。例如,嵌入式進程如何共享或轉發屬於父應用程序的鍵盤快捷鍵? – 2012-02-10 16:51:52

+0

是的,他仍然需要爲此而努力。 – Zenexer 2012-02-10 20:01:21

2

如果您有源代碼,可以嘗試將其移植到生成.NET代碼的Delphi Prism。雖然,如果你使用VCL,你正在進行一場艱苦的戰鬥。儘管Delphi 2006有一個.NET實現的VCL,但Prism只是用於.NET的Object Pascal,沒有VCL適配器。

另一個可用的工具是Hydra我沒有親自使用它,但他們聲稱提供.NET和「傳統」Delphi之間的互操作。如果它按照他們聲稱的那樣工作,那麼將舊的Delphi代碼轉換爲.NET應用程序可能是最好的選擇。

+0

棱柱幾乎和用C#重寫一樣多。但Hydra確實提供了一些互操作性,可能真的有所幫助。 +1爲Hydra。 – 2012-02-11 03:37:23