2010-04-14 67 views
1

我正努力在設計時將MDIChild窗體與父MDIForm設置左對齊Align:= alLeft。在父MDIForm上,工具欄與alTop對齊。顯然對齊的MDIChild高於父母客戶區(我不知道爲什麼),這就是垂直滾動條出現在父窗體上的原因。問題是,我希望這個表單動態創建;在這些MDIchild表單之間放置垂直Splitter,以便通過鼠標調整它們的大小。但是當我創建Splitter時,它完全在左邊對齊,就好像MDIChild窗體根本沒有對齊(alLeft)。如何對齊左側的MDIChild?

我設置MDIChild參數:

Align:=alLeft; 
Windowstate:=wsNormal; 
Borderstyle:=bsSizable; 

有誰解決過這個問題嗎?

感謝名單了很多

P.S 德爾福7,Win XP的

回答

0

MDI孩子從喜歡TSplitter定期嵌套控件另案處理,所以像 「對齊:= alLeft」 不會與他們合作。 MDI區域是所有其他控件對齊後剩下的區域。

最好的辦法是使用框架或將子表單直接放在表單上,​​而不使用MDI支持(設置爲Child.Parent := MainForm)。如果你真的想使用MDI支持,我想你需要編寫你自己的TMDISplitter組件。您可以嘗試在運行時使用TSplitter.CreateParented(MainForm.ClientHandle)創建TSplitter,但我懷疑它會起作用。

+0

我也嘗試將子窗體直接放置在嵌套在父窗體中的TPanel(alClient)中。這個好主意粉碎了TEdit,TMemo ...組件停止工作(我不能在其中寫入)的事實,除非兒童窗體的邊框是bsNone。 我不確定,如果它不依賴於Delphi版本。 我沒有嘗試使用幀,所以也許現在... – lyborko 2010-04-14 16:38:09

+0

我還沒有嘗試過,但我並不感到驚訝的邊框樣式錯誤導致問題。如果你想要帶有標題的可拖動窗口,你需要使用MDI支持,這意味着你需要創建一個新的splitter類來知道如何處理MDI窗口。這當然是可能的,但德爾福現有的對齊和分離器代碼將無濟於事。 – 2010-04-14 17:07:43

+0

我花了很多時間來解決它,錘子和鉗子,沒有成功。我必須承認,你可能是對的。我按照你的建議嘗試了框架,但我不喜歡它 - 它沒有標題,沒有x按鈕關閉。我希望它看起來很漂亮。所以定製的新分路器...我對此並不滿意...... – lyborko 2010-04-14 19:05:30

0

如果你正在使用MDI接口只是爲了在主窗體中放置「對齊」形式,我建議你使用其他方法,例如,使用主和子fsNormal形式並將子窗口對接到父窗體中也許在一個小組)。

如果您有興趣,請查看ManualDock方法,瞭解主窗體面板的子窗體和DockSite屬性。

在這種情況下,常規拆分器對您來說會很好。

+0

是的,我在最後一個評論中提到過...... Formstyle = fsNormal看起來像是Docked Control中的常規面板。標題欄完全消失。由於不明原因,在Tpanel中,只有當邊框:= bsNone時纔有效。否則,它看起來像我想要的,但你不能使用TEdit或TMemo或其他編輯控件... – lyborko 2010-04-14 21:03:45

0

我發現最好的解決方案是基於TFrame和常規TForm方法的組合。 我從各種組件(TPanel,TButton,TShape)創建了所有邊框,標題欄,表單按鈕及其在TFrame對象中的行爲。這個對象我穿上了「正常」的TForm。我將TForm屬性設置爲:

TForm.FormStyle:= fsNormal; TForm.BorderStyle:= bsNone; TForm.WindowState:= wsMaximized;
TForm.Align:= alClient;

以編程方式我將這個TForm託管到容器TPanel中,它是具有alClient屬性的普通TPanel。