![](/img/trans.png)
[英]Delphi XE2: Invisible Firemonkey controls in VirtualBox
[英]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.