切换SDI和MDI之间的GUI应用程序行为

时间:2010-01-29 14:30:55

标签: delphi mdi sdi

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

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

alt text http://i46.tinypic.com/5l0ykw.png

提前感谢。

4 个答案:

答案 0 :(得分:7)

下载Jedi JVCL并安装它并查看Demo for JvDocking“dock in code”。他们确切地这样做了。

他们意味着你实际上并没有使用FormStyle = fsMDIChild,除非你想要很多问题。通过代码对接,您可以“模拟”MDI。

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

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

您可以在“停靠”和“停靠”(浮动)模式下使用表单,这样您就可以获得停靠的IDE外观(VIsual Studio和RAD Studio),以及未移植的IDE外观(RAD Studio in脱离,或经典的德尔福7)。

答案 1 :(得分:4)

我会将当前窗口转换为帧并将这些帧与align = alClient放入mdi子窗口或正常窗口中配置。

但要注意:我从未真正这样做过,所以可能会有一些我不知道的问题。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

与@ WarrenP的解决方案一样,我强烈建议使用基于对接的解决方案。应该说你不需要使用Jedi VCL来实现这一目标。作为一个例子,here's我创建了一个非常简单的(all-native-vcl)组件,它允许您简单地将尽可能多的实例放到表单上并设置它们的对齐以启用对接(和选项卡式)对接)在这些地区。

MDI本身就是一个等待发生事故的意外。有一些解决方案可以实现“MDI外观和感觉”而不使用MDI本身,虽然我还没有遇到一个我认为“整洁”(可能是因为缺乏外观)。

最终,您应该质疑提供MDI作为选项的智慧。对接(有或没有移除能力,特别是当选项卡式对接是一个用户决定的选择)感觉更现代,并且(完成正确)可以比MDI更加灵活和直观。

仅仅是我的2便士。