在关于TCustomForm.FormStyle的Delphi文档中添加了一条说明:“不建议在运行时更改FormStyle。”
我想知道为什么不建议在运行时更改formstyle。 从用户界面的角度来看是不可取的,还是会出现一些技术问题?在运行时更改formstyle后会出现什么样的问题?
用例
我们希望改进MDI应用程序的多监视器支持。目前,所有子窗口都在主窗口(MDI父窗口)中打开。用户希望能够在主窗口外打开/移动子窗口,以便子窗口可以作为单独的浮动窗口打开,可以位于Windows桌面的任何位置。
我在Adobe Photoshop,Google Chrome和Microsoft Internet Explorer中看到了此功能的示例。 (标签可以从标签栏移动,并在单独的浮动窗口中打开)
答案 0 :(得分:9)
在运行时将FormStyle
从fsNormal
更改为fsMDIform
或fsMDIChild
需要重新创建窗口句柄,而这又需要重新创建所有窗口处理表单上的所有控件。当发生这种情况时,德尔福控制之外还有很多东西:也许你正在使用一些依赖于某些Windows控件的第三方控件但是第三方控件并不知道如何保存它的状态。重新创建Window句柄时,用户将失去所有工作。
幸运的是,你可以解决这个问题:
答案 1 :(得分:7)
很可能是因为表单样式更改会导致窗口句柄重新创建。这也将强制重新创建所有子窗口的句柄。
窗口重新创建基本上是可以在没有您注意的情况下发生的事情。但是有些控件在重新创建方面存在问题。例如,我过去曾使用工具栏控件来解决这个问题。更新版本的Delphi对重新创建更具弹性。