1

这个问题适用于两种情况。

(1)

第一个是有一个 MDI 窗体和 MDI 子窗体,在运行时,如果我尝试水平或垂直调整窗体的大小,我无法越过主 MDI 窗体的边缘,某处必须有一个 SetBounds 或类似的东西来防止这种类型的行为,因为鼠标刚刚捕捉到边缘。

我想要的是能够调整 MDI 表单边界 rect 的过去/之外的大小 - 然后会在主 MDI 表单上显示滚动条(就像您移动子表单时一样)。

(2)

第二个是我发现 MDI 布局应用程序中的滚动有点烦人,而且使用起来不太舒服,所以我认为我可以通过在 TScrollBox 中设置一个表单来模拟它,而不是使用 MDI,这样做我希望能提供更好的流畅性滚动。但与第一个场景一样,将表单放置在 ScrollBox 内仍然不允许在客户端外部调整大小 - 并且当您在 ScrollBox 周围移动表单时,执行此方法甚至不会显示滚动条。


您可以通过创建一个新的 MDI 应用程序来快速尝试此操作。尝试使用右下角调整大小并尽可能向右侧/底部拖动,鼠标停在主 MDI 客户端上,防止外部调整大小。

那么,如何在运行时允许在父边界之外调整窗体的大小,无论它是 MDI 子窗体还是 TScrollBox 的父窗体?

我是否需要设置一个我可能忽略的简单属性,或者是否需要做更多工作,例如覆盖表单的消息?

4

1 回答 1

1

MDI 子级不受其父级大小的限制,但它们在其父级边界之外不可见,因此无法在这些边界之外调整大小。

但是,您可以将它们移到边界之外,因此如果您将子表单移到左侧,只留下表单的一部分可见,您可以将该可见部分的大小调整到父表单的边界。所以实际上并没有大小限制,但这只是一个功能限制,当它的大小句柄/边框将被隐藏时,您无法进一步调整表单的大小。

我认为,与其将 MDI 子项放在滚动框上或调整 MDI 子项的大小,不如将子项的内容放在滚动框上,并让子窗体本身保持原样。

或者,当然,您可以修改设计,使您根本不需要滚动,但在不了解您的表单的情况下不可能给出适当的建议。

于 2012-12-13T16:34:33.693 回答