我有一个包含多个面板的表单,每个面板都有 Align=alTop,因此它们从表单顶部很好地堆叠在一起。

但是,我想动态更改这些面板的外观顺序 - 即上下移动它们。这样做的最佳方法是什么?

有帮助吗?

解决方案

可以很容易地通过它的热门属性设置为 0 移动顶端对齐面板顶端。为此反向请求的订单(底部面板第一)和完成的操作。

其他提示

将他们你在设计时将它们移动鼠标以同样的方式:在当前面板的Top属性设置为一个小于你想成为当前面板下方的面板的Top财产。该VCL将其余的工作。

如果您已经将几个小组,开始 BeginDeferWindowPos 。调整所有的面板,以任何你想要的DeferWindowPos坐标,然后让他们所有的举动立刻与EndDeferWindowPos

我建议构建一个框架,您可以在其中动态地从其父控件中删除表单或向其父控件添加表单。一般来说,创建/添加的顺序是视觉顺序,但从您的问题来看,我了解您希望在应用程序生命周期内更改顺序,因此仅更改原始创建顺序是不够的。

要更改顺序,请尝试:

  1. 隐藏面板
  2. 从其父控件中删除面板
  3. 按照您希望的新顺序将面板添加到其父控件
  4. 显示面板

如何试图顶部对齐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;

在最后一个将是第一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top