如何防止两个对齐底部控件与反转顺序?

Mar*_*der 5 delphi vcl delphi-2007

我有一个包含三个主要组件的表单:

  1. 设置为与客户端对齐的FlowPanel
  2. 第二个FlowPanel设置为Align to Bottom
  3. StatusBar设置为Align to Bottom.

一切都开始看起来很棒.但是与底部对齐的FlowPanel也设置为AutoSize.它包含一个可以自行折叠的面板.内部面板包含用户可以决定隐藏的摘要信息.这会将FlowPanel的大小降低到非常小的尺寸但不会完全消失.仍然有一个按钮,用户可以在其中重新展开摘要面板.

面板重新展开导致FlowPanel增长时出现问题.那时状态栏和FlowPanel的顺序相反.它们仍然设置为对齐底部,但现在状态栏位于我的FlowPanel之上.

我可以在没有折叠面板的测试应用程序中复制它,只需在表单上放置按钮即可查看底部流量面板的高度.如果高度增加,则订单会发生变化.如果它减少了,那么一切都保持相同的顺序.我的测试表单中唯一的代码是:

FlowPanel2.Height := FlowPanel2.Height * 2;
Run Code Online (Sandbox Code Playgroud)

我也测试了这个,底部面板是常规TPanel而不是FlowPanel,结果相同.

关于为什么会发生这种情况以及如何预防的任何想法?

移动状态栏图像

Uli*_*rdt 8

我有时也有这个.我的解决方案是将控件的顶部设置在底部,以达到"足够大"的值 - 类似OtherControl.Top + OtherControl.Height + 1应该工作甚至是MaxIntIIRC.


Sir*_*ufo 8

我的解决方案

  1. 在表单上放置状态栏并与底部对齐
  2. 在窗体上放置一个Panel(Container_Panel)并与客户端对齐
  3. 将FlowPanel放在Container_Panel上并与底部对齐
  4. 将FlowPanel放在Container_Panel上并与客户端对齐

现在你应该没有问题了

  • 另一个不需要`Container_Panel`的选项是使用`Align = alCustom`来实现自定义对齐.但是对于不支持`alClient`的版本,或者你只是不想为它编写任何代码,那么`Container_Panel`方法工作正常,代价是使用额外的`HWND`句柄. (2认同)