德尔福:如何使用align = alTop以编程方式调整组件的视觉顺序
题
我有一个包含多个面板的表单,每个面板都有 Align=alTop,因此它们从表单顶部很好地堆叠在一起。
但是,我想动态更改这些面板的外观顺序 - 即上下移动它们。这样做的最佳方法是什么?
解决方案
可以很容易地通过它的热门强>属性设置为 0 强>移动顶端对齐面板顶端。为此反向请求的订单(底部面板第一)和完成的操作。
其他提示
将他们你在设计时将它们移动鼠标以同样的方式:在当前面板的Top
属性设置为一个小于你想成为当前面板下方的面板的Top
财产。该VCL将其余的工作。
如果您已经将几个小组,开始 BeginDeferWindowPos
。调整所有的面板,以任何你想要的DeferWindowPos
坐标,然后让他们所有的举动立刻与EndDeferWindowPos
。
我建议构建一个框架,您可以在其中动态地从其父控件中删除表单或向其父控件添加表单。一般来说,创建/添加的顺序是视觉顺序,但从您的问题来看,我了解您希望在应用程序生命周期内更改顺序,因此仅更改原始创建顺序是不够的。
要更改顺序,请尝试:
- 隐藏面板
- 从其父控件中删除面板
- 按照您希望的新顺序将面板添加到其父控件
- 显示面板
如何试图顶部对齐TGridPanel
与一列的名词的行,而不是---重新排序顶端对齐面板是有点痛的,真的。
(注:TGridPanel
可在德尔福2007年和后,如果我没有记错)。
如果你改变了面板的顶部面板视觉变化的顺序。
尝试此(所有的板对齐的是alTop 和<强>具有相同的高度强>):
PANEL0结果 PANEL1结果 PANEL2结果 ·Panel3中点击 PANEL4
目前的的OnClick 强>的事件的所有面板强>做到这一点:
TPanel(Sender).Top := TPanel(Sender).Top - TPanel(Sender).Height - 2;
如果你在面板上单击它向上移动一个位置。
这是这个想法。更改顶部X的像素。结果 同时,如果你这样做:
TPanel(Sender).Top := TPanel(Sender).Top - (TPanel(Sender).Height * 2)- 2;
在面板向上2个位置。
<强>增加:如果您使用拖放,此事件返回的位置(X和Y);与原来的位置和结束位置可以计算出WEW顶部ASIGN到面板上。
借口形式我的英文不好。 问候
我用下面的代码:
procedure Show_Hide (Flag_Show : boolean);
begin
if Flag_Show then
begin
with Panel_1 do begin Align := alTop; Visible := true; end;
with Panel_2 do begin Align := alTop; Visible := true; end;
with Panel_3 do begin Align := alTop; Visible := true; end;
with Panel_4 do begin Align := alTop; Visible := true; end;
end else
begin
with Panel_1 do begin Visible := false; Align := alNone; end;
with Panel_2 do begin Visible := false; Align := alNone; end;
with Panel_3 do begin Visible := false; Align := alNone; end;
with Panel_4 do begin Visible := false; Align := alNone; end;
end;
end;
根据我的愿望 Panel_1 Panel_2 Panel_3 Panel_4
我知道它的一个老的文章,但基本上都是帮我 - 顶属性设置为零的想法。 我不能使用编程设定的位置事业的想法,这是到应用程序的用户 - 它可以选择显示在应用中的一些图表,然后,在该teecharts的所有面板(父)是对齐是alTop。 我设置其顶部属性设置为0的逆顺序上,然后只设置为根据用户输入可见真或假...
感谢。
panel3.Visible := True;
panel3.Top := 0;
panel2.Visible := True;
panel2.Top := 0;
panel1.Visible := True;
panel1.Top := 0;
在最后一个将是第一个。