Delphi - TSplitter在运行时对齐

时间:2013-08-09 10:06:35

标签: delphi delphi-xe

我有以下面板结构

enter image description here

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

enter image description here

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

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;

其中

  

CommentPanelPosition


当分离器位于右侧时为0 1当分离器位于底部时 2当分路器位于左侧时

如何在将分离器对齐到左边时管理问题?

1 个答案:

答案 0 :(得分:4)

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

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

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

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

但是...

我认为重新调整时的Left属性非常重要,所以如果面板对齐并且分割器也是如此,并且你将它们向左移动(首先是分离器,然后是面板),面板可能会是再次分配器的右侧,因为在重新排列时其Left属性大于0。 因此,通过设置被分割的控件的适当属性,我感觉更安全,因此它们处于正确的位置。

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

因此,设置面板的Left(或Right,Top,Bottom)属性实际上只是解决了这个缺乏分割器功能的问题。