我正在努力将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
答案 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。