【问题标题】:Delphi - TSplitter align at runtimeDelphi - TSplitter 在运行时对齐
【发布时间】:2013-08-09 10:06:34
【问题描述】:

我有以下面板结构

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

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

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

在将拆分器向左对齐时如何解决问题?

【问题讨论】:

    标签: delphi delphi-xe


    【解决方案1】:

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

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

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

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

    但是..

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

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

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

    【讨论】:

    • 嗯,我不确定,我有正确的组件。我的意思是应该离开分离器的组件。也许是pROComponents?再看一遍,我认为sROSplitterComponents 就是拆分器本身。我已经更新了我的答案。
    • 确实如此。谢谢你。 +1 并接受。对于其他用户,您能否简要解释一下为什么此解决方案有效?
    • 我试图在我更新的答案中解释它。长话短说:拆分器会像任何其他组件一样重新对齐,忽略它所属的面板,所以这只是解决这个问题的一个技巧。
    • 您不必这样做。这种解释一开始就应该存在。 ;)
    猜你喜欢
    • 2013-03-27
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多