2011-11-17 112 views
5

是否可以使用FireMonkey以傳統意義上的許多文檔形式/框架和一個主表單來創建MDI應用程序?使用FireMonkey的MDI接口

我特別感興趣,因爲表單上沒有MDI控件了。它是否被替換爲不同的東西?

編輯:添加到這個問題,當我創建子窗體,他們都表現出分別在任務欄上,甚至OpenDialogs ..

+0

我想最終會修正XE2更新版本。 – Kromster

回答

5

這裏有一個方法,你可以使用:

1)創建您的個性化形式正常,除了使用TLayout之外,將其稱爲「LayoutMain」(對齊alClient)作爲該窗體上所有控件的父項。

2)在你的「主表單」上,當你想把一個表單實例作爲一個MDI接口使用時,創建一個TLayout(稱之爲「FormContainer」或其他),把它作爲(與頂部對齊)另一個TLayout(稱爲「FormHeader」),其中包含表單標題,最小化/最大化/關閉按鈕以及您希望在「框架」標題上的其他任何控件。 這叫做複合

3)創建子窗體實例(,但不顯示它),然後將該實例的主TLayout「LayoutMain」父項添加到主窗體的TLayout「FormContainer」中。

4)在前面提到的TLayout中(名稱爲「FormHeader」),給它提供OnMouseDownOnMouseMove事件以提供將它拖到主窗體上的能力。

當您想要最大化主窗體內的子窗體時,只需將外部TLayout「FormContainer」對齊屬性設置爲alClient,並記住將其原始頂部,左側,寬度和高度值存儲在窗體的實例,以便在按下恢復按鈕時可以調出它們。

的確,這是一個相當複雜的解決方案,但就我所知,這是您實現FireMonkey所需的唯一方法,因爲它今天存在(大約更新2)。

我不希望Embarcadero提供任何形式的MDI仿真作爲FireMonkey「開箱即用」的一部分,因爲MDI被認爲是一種老式的方法。

更現代的解決方案是使用Docking,就像RAD Studio IDE本身一樣。這提供了兩個世界中最好的,讓用戶可以自由選擇他們想要鏈接到主表格中的子表單,或者自行顯示它們(或任何停靠的佈置組合)。

+0

感謝您的好回答,它一定會有所幫助。在我的情況下,我正在尋找一個更規範的解決方案,這將允許我有多個獨特的TFMXHandles(我將轉換爲平臺HWNDs以便在它們上初始化OpenGL上下文)的MDI窗口。我現有的解決方案是創建幾種形式,但很遺憾,他們不能很好地協作 - Z從任務欄排序和聚焦是錯誤的。 – Kromster