Delphi,MDI vs Tabs用于多文档界面

时间:2009-09-22 23:49:02

标签: delphi interface tabs mdi

我正在开发一个多文档应用程序。目前它使用MDI,这对我(作为开发人员)以及我相信的用户来说非常方便。但是有一个“反对” - 我没有找到快速加载许多子窗口的解决方案(每次创建窗口并最大化以填充父级区域时,到目前为止,还有一个调整大小的“动画”需要大量的时间,因此我正在考虑切换回选项卡式界面(这需要更多的工作,我需要将一个表单“嵌入”到页面表中,因为那里可用的表格种类很多,有些用于编辑文本文档,有些用于其他对象... ...

那么,你有什么看法?我应该使用MDI还是标签界面?

4 个答案:

答案 0 :(得分:11)

为了避免新MDI子窗口的大小调整动画(以及因此延迟),在创建子窗口之前将WM_SETREDRAW消息发送到父TForm的ClientHandle属性,然后在完成后再次发送,即:

Self.Perform(WM_SETREDRAW, False, 0);
... create child windows as needed ...
Self.Perform(WM_SETREDRAW, True, 0);
Windows.InvalidateRect(Self.ClientHandle, nil, True);
Windows.UpdateWindow(Self.ClientHandle);

答案 1 :(得分:9)

MDI是在Windows 3天(或可能更早的时候)开发出来的,并且近来得不到很好的支持。如果您需要具有不同表单的多个文档,我建议使用选项卡式界面。使用框架而不是表单,并创建新选项卡并在其上放置框架,对齐alClient。

答案 2 :(得分:5)

MDI肯定比你引用的更负面。您可以在维基百科中找到关于此的讨论,甚至也可以在Windows界面指南中找到。 MDI现已被弃用多年。微软本身不再以其“标准”形式使用MDI用于任何大型应用程序,它们通常只提供MDI仿真以及其他UI样式。

如果您的程序适用于具有多个屏幕的用户,则MDI和基于选项卡的UI都存在将文档窗口限制在父窗口内部的问题。

通过适当的应用程序设计,您无需在MDI和基于选项卡的UI之间做出决定。让您的用户决定他们最适合的用户界面,以及最适合他们工作风格的用户界面。允许多个独立的顶级文档窗口(在一个应用程序实例中或多个)。它可以像为文档创建框架类一样简单,并在运行时决定是将它们嵌入到选项卡控件,MDI子窗口还是顶层窗口中。

答案 3 :(得分:3)

问题:用户一次能够看到多个嵌入的表单或框架是否很重要?如果没有,肯定会去标签。

标签可让您更轻松地浏览并查看可用内容。但是使用标准的PageControl,你一次只能看到一个标签 - 没有“平铺”或“级联”。例如,当用户需要将内容从一个选项卡拖动到另一个选项卡时,问当然,它可以完成,但不是那么方便 - 因为这次用户看不到他们在哪里拖东西。

要克服此限制,您必须查看停靠UI,这会增加复杂性,但可以为您提供标签以及能够平铺它们。