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

mig*_*jek 7 delphi tabs mdi interface

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

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

Rem*_*eau 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);
Run Code Online (Sandbox Code Playgroud)


Mas*_*ler 9

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

  • 不,他们不是.Office 2007使用专有框架,并且使用内置的WinAPI MDI功能.可能++看起来像是MDI,但事实并非如此. (6认同)
  • 究竟.像JvDocking一样使用DOCKING.这个"LOOKS LIKE"MDI但是没有使用MDI formStyle和Win31时代代码,顺便说一句,它是有缺陷的. (2认同)
  • @JamesJohnston:我第一次听到的时候自己调查过,因为我也不相信,并且发现与Spy ++或WinSight相同的信息(当时不记得哪个).我也不喜欢它.有时候我希望SDI能够在多个显示器上并排处理事物,而Excel的设计方式使其无法实现. (2认同)

mgh*_*hie 5

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

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

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