我正在努力将MDIChild表单与父MDIForm的左侧对齐,在设计时设置Align:=alLeft。在父MDIForm上,工具栏与alTop对齐。显然对齐的MDIChild比父窗体的客户区高(我不知道为什么),这就是为什么垂直滚动条出现在父窗体上的原因。问题是,我希望动态创建这个表单;在这些MDIchild表单之间放置垂直拆分器,以便通过鼠标调整它们的大小。但当我创建拆分器时,它会完全靠左对齐,就好像MDIChild表单根本没有对齐(alLeft)一样。
我将MDIChild参数设置为:
Align:=alLeft;
Windowstate:=wsNormal;
Borderstyle:=bsSizable;以前有人解决过这个问题吗?
非常感谢
P.S Delphi 7,Win XP
发布于 2010-04-14 23:59:53
MDI子控件与常规的嵌套控件(如TSplitter )是分开处理的,因此像"Align := alLeft“这样的东西不能与它们一起工作。MDI区域是所有其他控件对齐后剩下的部分。
最好的方法是使用框架,或者将子窗体直接放在窗体上,而不使用MDI支持(设置Child.Parent := MainForm)。如果您真的想使用MDI支持,我认为您需要编写自己的TMDISplitter组件。您可以尝试在运行时使用TSplitter.CreateParented(MainForm.ClientHandle)创建TSplitter,但我怀疑它是否能正常工作。
发布于 2010-04-15 04:49:38
如果您使用MDI接口只是为了将“对齐的”窗体放在主窗体中,我建议您使用其他方法,例如,使用主fsNormal窗体和子窗体,并将子窗体停靠在父窗体中(可能是在面板中)。
如果您感兴趣,请看下子窗体的ManualDock方法和主窗体面板的DockSite属性。
在这种情况下,常规拆分器可以很好地为您工作。
发布于 2010-04-19 14:54:18
我发现最好的解决方案是基于TFrame和普通TForm方法的组合。我使用各种组件(TPanel、TButton、TShape)在TFrame对象中创建了所有边框、标题栏、表单按钮及其行为。这个对象是我放在“普通”TForm上的。我将TForm属性设置为:
TForm.FormStyle:=fsNormal;TForm.BorderStyle:=bsNone;TForm.WindowState:=wsMaximized;
TForm.Align:=alClient;
通过编程,我将此TForm设置为容器TPanel的父对象,它是具有alClient属性的普通TPanel。
https://stackoverflow.com/questions/2638868
复制相似问题