代码之家  ›  专栏  ›  技术社区  ›  Roddy

Delphi:如何用Align=Altop编程调整组件的可视顺序

  •  11
  • Roddy  · 技术社区  · 15 年前

    我有一个有很多面板的表单,每个面板都有align=altop,所以它们从表单的顶部很好地堆叠在一起。

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

    7 回复  |  直到 9 年前
        1
  •  28
  •   Uwe Raabe    15 年前

    通过设置顶部对齐面板的 顶部 属性到 . 按请求的相反顺序执行(首先是底部面板),然后完成。

        2
  •  6
  •   Rob Kennedy    15 年前

    用鼠标按与设计时相同的方式移动它们:设置当前面板的 Top 属性小于 顶部 要位于当前面板之下的面板的属性。剩下的由VCL负责。

    如果必须移动多个面板,请从 BeginDeferWindowPos . 将所有面板调整到所需的坐标 DeferWindowPos 然后让他们同时行动 EndDeferWindowPos .

        3
  •  1
  •   Roee Adler    15 年前

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

    要更改顺序,请尝试:

    1. 隐藏面板
    2. 从父控件中移除面板
    3. 按您希望的新顺序将面板添加到其父控件中
    4. 显示面板
        4
  •  1
  •   onnodb    15 年前

    试试看顶部对齐的怎么样 TGridPanel 一列和 n 相反,重新排序顶部对齐的面板有点麻烦,真的。

    (注: TGIDIDPAND 如果我没记错的话,可以在Delphi2007和更高版本中找到。

        5
  •  1
  •   Germán Estévez -Neftalí-    15 年前

    如果更改面板顶部,则可视面板的顺序将更改。

    试试这个(所有面板对齐 阿尔塔普 同一高度 ):

    PANEL0
    面板1
    面板2
    面板3
    面板4

    AT 点击 事件 所有面板 这样做:

     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顶部,以便与面板对齐。

    请原谅我的英语不好。 当做

        6
  •  1
  •   Apqu    9 年前

    我使用了以下代码:

    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;
    

    按照我的意愿 PANELL1 PANELL2 PANELL3 PANELL4

        7
  •  0
  •   ronaldosantana    15 年前

    我知道这是一个古老的帖子,但基本上帮了我一个忙——把顶级房产归零。 我不能使用编程设置位置的想法,因为这取决于应用程序用户-它可以选择在应用程序上显示一些图表,然后,所有的teecharts面板(父)都对齐altop。 我将它们的top属性设置为0,然后根据用户输入设置visible true或false…

    谢谢。

    推荐文章