Delphi - TSplitter 在运行时对齐

RBA*_*RBA 2 delphi delphi-xe

我有以下面板结构

在此输入图像描述

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

在此输入图像描述

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

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;
Run Code Online (Sandbox Code Playgroud)

在哪里

评论面板立场


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

如何解决将分离器向左对齐时出现的问题?

Gol*_*rol 5

对准分离器后,设置pROComponents.Left := 0;,

begin
  pROComponents.Align := alLeft;
  TabellePanel.Align := alClient;
  sROSplitterComponents.Align := alLeft;
  pROComponents.Left := 0;
end;
Run Code Online (Sandbox Code Playgroud)

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

因此,不同的解决方案可能是首先将分离器向左对齐,然后将面板向左对齐。

但..

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

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

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