繁体   English   中英

如何在Delphi中以编程方式更新不可见控件的对齐方式?

[英]How to programmatically update the alignment of invisible controls in Delphi?

我正在内存中创建一个面板,以使用“ animatewindow”方法在带有动画的表单中显示。 它应该在顶部或底部排成一行。 使用以下代码,面板将以默认位置显示为动画,然后对齐。

var
  zp: TPanel;
begin
  zp:= TPanel.Create(self);
  zp.Visible := False;
  zp.Parent := Self;

  zp.Color := clred;

  zp.Height := 32;
  zp.Align := alBottom;

  //zp.Visible := True; 
  //zp.Visible := False;


  AnimateWindow(zp.Handle, 200, AW_ACTIVATE or AW_SLIDE or AW_VER_NEGATIVE);
  zp.Visible := True;

我想知道如何使其仅在对齐后才显示。

注意:如您所见,有一段摘要说明该对象在不到一秒钟的时间内可见,并且肉眼看不见,但是这样做似乎是不正确的。

只有可见控件会对齐。 不可见的控件不参与对齐,因此,当您设置zp.Align := alBottom ,它只有在控件可见后才起作用。

AnimateWindow函数以其当前坐标显示窗口。 因此,要使控件出现在正确的位置,在调用AnimateWindow之前,它必须已经具有正确的坐标。 您已经确定了执行此操作的简单方法,即显示然后立即隐藏控件。 显示控件会迫使Delphi重新调整控件。 但是,我同意你的看法,这并不是真正的正确解决方案。

您可以将控件的所需坐标显式设置为对齐后的坐标。 例如:

zp.Left := 0;
zp.Height := 35;
zp.Top := Self.ClientHeight - zp.Height;
zp.Width := Self.ClientWidth;

如果此控件在表单上有很多同级控件,尤其是那些与表单两边对齐的同级控件,则上面的代码可能需要更复杂。 在某个时候,您可能会认为代码比您愿意继续维护的代码更复杂,并且最好使用“欺骗”的方式来简短地显示和隐藏控件。 没有人会为您的决定而责备您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM