2

我有以下面板结构

在此处输入图像描述

从代码中,我需要根据右侧、底部或左侧的情况对齐底部面板。将拆分器向右和底部对齐不会造成问题,但将拆分器向左对齐我做不到

在此处输入图像描述

负责对齐面板和拆分器的代码

procedure TForm1.alignThem;
begin
  case CommentPanelPosition of
        0: begin
            pROComponents.Align := alRight;
            sROSplitterComponents.Align := alRight;
            sROSplitterComponents.width := 3;

            pROComponents.Width := GridPanel.Width div 4;
          end;
       1:
        begin
          pROComponents.height := GridPanel.height div 3;
        end;
      2:
        begin
          pROComponents.Align := alLeft;
          TabellePanel.Align := alClient;
          sROSplitterComponents.Align := alLeft
        end;
  end;
end;

在哪里

评论面板位置


分流器位于右侧时为0 分流
器位于底部
时为 1 分流器位于左侧时为 2

将分离器向左对齐时,我该如何解决这个问题?

4

1 回答 1

5

对齐拆分器后,设置pROComponents.Left := 0;,

begin
  pROComponents.Align := alLeft;
  TabellePanel.Align := alClient;
  sROSplitterComponents.Align := alLeft;
  pROComponents.Left := 0;
end;

您有两个左对齐的组件(拆分器和面板)。最后一个向左移动的是分离器。此时它的左侧位置已经为 0,导致它移动到最左侧并将面板推到右侧。

因此,另一种解决方案可能是首先将拆分器向左对齐,然后将面板向左对齐。

但..

我相信重新对齐时的 Left-property 很重要,所以如果面板右对齐并且拆分器也对齐,并且您将它们向左移动(先拆分,然后是面板),面板可能会在右侧再次拆分器,因为它的Left属性在重新对齐时大于 0。因此,通过设置要拆分的控件的适当属性,我感觉更安全,因此它们处于正确的位置。

拆分器似乎是一个智能组件,但没有办法直接将它与两个控件相关联。在设计表单或在代码中重新对齐表单时,拆分器不知道它属于哪个控件,并且它不会尝试将自己定位在面板之间的逻辑位置。它只是遵循适用于每个控件的正常规则,并且仅在您实际开始使用鼠标移动拆分器时才找到正确的控件。

因此,设置面板的左(或右、上、下)属性实际上只是解决拆分器功能不足的一种解决方法。

于 2013-08-09T10:48:38.513 回答