繁体   English   中英

Delphi-TSplitter在运行时对齐

[英]Delphi - TSplitter align at runtime

我的面板结构如下

在此处输入图片说明

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

在此处输入图片说明

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

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当分离器位于左侧时

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

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

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

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

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

但..

我认为重新对齐时的“左属性”很重要,因此,如果面板右对齐,并且拆分器也对齐,然后将它们向左移动(先拆分,然后拆分面板),则该面板可能在再次拆分,因为重新对齐时其Left属性大于0。 因此,通过设置要拆分的控件的适当属性,我感到更安全,因此它们处于正确的位置。

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

因此,设置面板的Left(或Right,Top,Bottom)属性实际上只是解决此分离器功能不足的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM