如何在左边对齐MDIChild?

时间:2010-04-14 15:45:19

标签: delphi delphi-7

我正在努力将MDIChild表单对齐在设计时父MDIForm设置Align:= alLeft的左侧。在父MDIForm上工具栏与alTop对齐。显然对齐的MDIChild高于父客户端区域(我不知道为什么),这就是为什么垂直滚动条出现在父窗体上的原因。问题是,我想要动态创建这个表单;在这些MDIchild表单之间放置垂直拆分器,以便通过鼠标调整它们的大小。但是当我创建Splitter时,它完全在左侧对齐,就好像MDIChild形式没有对齐(alLeft)一样。

我将MDIChild参数设置为:

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

以前有人解决了这个问题吗?

thanx很多

P.S Delphi 7,Win XP

3 个答案:

答案 0 :(得分:0)

MDI子项与常规嵌套控件(如TSplitter)分开处理,因此“Align:= alLeft”等内容不适用于它们。 MDI区域是所有其他控件对齐后剩余的区域。

您最好的选择是使用框架或将子表单直接放在表单上而不使用MDI支持(设置Child.Parent := MainForm)。如果您真的想使用MDI支持,我认为您需要编写自己的TMDISplitter组件。您可以尝试使用TSplitter.CreateParented(MainForm.ClientHandle)在运行时创建TSplitter,但我怀疑它是否可行。

答案 1 :(得分:0)

如果您使用MDI接口只是为了在主窗体中放置“对齐”的表单,我建议您使用其他方法,例如,使用主要和子fsNormal表单并将子对接在父表单中(也许在一个小组中。)

如果您有兴趣,请查看子表单的ManualDock方法和主表单面板的DockSite属性。

在这种情况下,常规分割器将很适合您。

答案 2 :(得分: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。