【问题标题】:Switch GUI application behavior between SDI and MDI在 SDI 和 MDI 之间切换 GUI 应用程序行为
【发布时间】:2011-01-10 21:01:10
【问题描述】:

我目前有一个使用 Delphi 7 构建的 SDI 应用程序,我希望最终用户在运行时选择 SDI 和 MDI 之间的接口类型。我的问题是如何在运行时更改 SDI 和 MDI 之间的应用程序行为?

目前我知道有几个使用 delphi 构建的应用程序允许这样做:EMS SQL ManagerTOAD

提前致谢。

【问题讨论】:

    标签: delphi mdi sdi


    【解决方案1】:

    我会将我当前的窗口转换为框架,并将这些带有 align=alClient 的框架按照配置放入 mdi 子窗口或普通窗口。

    但请注意:我实际上从未这样做过,因此可能存在我不知道的问题。

    【讨论】:

    • 你不需要转换任何东西。您可以使用 TForm.ManualDock 将表单放到您的窗口上,而无需将它们更改为框架。
    【解决方案2】:

    在运行时将 TForm.FormStyle 设置为 fsNormal 或 fsMDIChild,具体取决于您想要 SDI 还是 MDI。

    【讨论】:

    • “真正的 MDI”是个坏消息。见stackoverflow.com/questions/1463221/…
    • @WarrenP:如果您不喜欢 MDI,我很抱歉,但这是对这个问题的有效答案
    • 这与不喜欢它无关。它有严重的可用性问题。见链接。今天的用户拥有多显示器系统,而 MDI 不再适合。对接允许 MDI 的所有优点而没有它的缺点。不关心可用性并不意味着它“喜欢或不喜欢”。我关心的是用户。用户体验很重要。此外,MDI 也充满了小故障。
    【解决方案3】:

    下载 Jedi JVCL 并安装它并查看 JvDocking 的“代码对接”演示。他们正是这样做的。

    他们的意思是你实际上并没有使用 FormStyle=fsMDIChild 除非你想要很多问题。 MDI 在您需要时通过停靠在代码中来“模拟”。

    不要将窗口转换为框架。这是一个糟糕的解决方案。

    对于没有 MDI 问题的类似 MDI 的环境,请使用对接解决方案(支持对接的商业或开源组件)。我使用 JEDI JVCL 中包含的 JvDocking,它是免费和开源的。

    您可以在“停靠”和“未停靠”(浮动)模式下使用表单,这为您提供了停靠的 IDE 外观(VIsual Studio 和 RAD Studio)以及未停靠的 IDE 外观(RAD Studio 在未停靠或经典的 delphi 7)。

    【讨论】:

      【解决方案4】:

      与@WarrenP 的解决方案一样,我强烈推荐基于对接的解决方案。应该说不需要使用 Jedi VCL 来实现这一点。例如,here's 是我制作的一个非常简单的(全原生 vcl)组件,它允许您简单地将尽可能多的实例放到表单中并设置它们的对齐方式以启用停靠(和选项卡式停靠)在那些地区。

      MDI 本身就是一个等待某个地方发生的意外。有一些解决方案可以在不使用 MDI 本身的情况下实现“MDI 外观”,但我还没有遇到过我认为“整洁”的解决方案(可能是因为缺乏外观)。

      最终,您可能应该质疑将 MDI 作为一种选择是否明智。对接(有或没有脱离的能力,特别是当标签对接时是用户确定的选择)感觉更现代,而(正常完成)可能比MDI更灵活,直观。

      只值我的 2 便士。

      【讨论】:

        猜你喜欢
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多