2010-04-14 44 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。