我有以下面板结构
从代码中我需要根据右侧,底部或左侧的情况对齐底部面板。将分离器对齐到右侧和底部不会造成问题,但是将分离器对齐到左侧我无法做到
负责面板和分割器对齐的代码
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当分路器位于左侧时
如何在将分离器对齐到左边时管理问题?
答案 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)属性实际上只是解决了这个缺乏分割器功能的问题。