我目前有一个使用 Delphi 7 构建的 SDI 应用程序,我希望最终用户在运行时选择 SDI 和 MDI 之间的接口类型。我的问题是如何在运行时更改 SDI 和 MDI 之间的应用程序行为?
目前我知道有几个使用 delphi 构建的应用程序允许这样做:EMS SQL Manager和TOAD。
提前致谢。
我目前有一个使用 Delphi 7 构建的 SDI 应用程序,我希望最终用户在运行时选择 SDI 和 MDI 之间的接口类型。我的问题是如何在运行时更改 SDI 和 MDI 之间的应用程序行为?
目前我知道有几个使用 delphi 构建的应用程序允许这样做:EMS SQL Manager和TOAD。
提前致谢。
下载 Jedi JVCL 并安装它,然后查看 JvDocking“代码对接”的演示。他们正是这样做的。
它们意味着您实际上不会使用 FormStyle=fsMDIChild ,除非您想要很多问题。MDI 在您需要时通过停靠在代码中来“模拟”。
不要将窗口转换为框架。这是一个糟糕的解决方案。
对于没有 MDI 问题的 MDI 类环境,请使用对接解决方案(支持对接的商业或开源组件)。我使用 JEDI JVCL 中包含的 JvDocking,它是免费和开源的。
您可以在“停靠”和“未停靠”(浮动)模式下使用表单,这将为您提供停靠的 IDE 外观(VIsual Studio 和 RAD Studio),以及未停靠的 IDE 外观(未停靠的 RAD Studio,或经典的德尔福 7)。
我会将我当前的窗口转换为框架,并将这些带有 align=alClient 的框架放入 mdi 子窗口或配置的普通窗口中。
但请注意:我实际上从未这样做过,因此可能存在我不知道的问题。
在运行时将 TForm.FormStyle 设置为 fsNormal 或 fsMDIChild,具体取决于您想要 SDI 还是 MDI。
和@WarrenP 的解决方案一样,我强烈推荐基于对接的解决方案。应该说不需要使用 Jedi VCL 来实现这一点。例如,这是我制作的一个非常简单的(全原生 vcl)组件,它允许您简单地将尽可能多的实例放到表单中并设置它们的对齐方式以启用停靠(和选项卡式停靠)地区。
MDI本身就是一个等待发生的意外。有一些解决方案可以在不使用 MDI 本身的情况下实现“MDI 外观和感觉”,尽管我还没有遇到一个我认为“整洁”的解决方案(可能是因为缺乏外观)。
最终,您可能应该质疑将 MDI 作为一种选择是否明智。对接(有没有能力拆除的能力,尤其是当标签对接是用户确定的选择时)感觉更现代,并且(正确地完成)比MDI更灵活和直观。
只值我的 2 便士。