【发布时间】:2017-09-20 11:18:11
【问题描述】:
我正在内存中创建一个面板,以使用“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;
我想知道如何让它在对齐后才出现。
注意:如您所见,有一个 sn-p 注释使对象在几分之一秒内可见并且肉眼无法察觉,但是这样做似乎不正确。
【问题讨论】:
-
也许在设置 Align 之后最后设置 Parent?
-
查看
TWinControl.AlignControls和 Vcl.Controls 中的内部procedure DoAlign(AAlign: TAlign);似乎有必要使控件可见以对齐。这就说得通了。如果您有一个带有alClient的控件和一个带有alLeft的控件,例如您会期望客户端对齐控件在另一个不可见时占用所有空间,因此明显不考虑 invisiblealLeft控件。您能否在表单尚未显示时创建面板并在设置Parent和Align时使其不可见?然后再制作动画? -
“您能否在表单尚未显示时创建面板,并在设置 Parent 和 Align 时使其不可见?然后再对其进行动画处理?” 不能,因为它是一个消息组件,需要在表单显示时创建。
-
我不明白为什么会这样。
-
@kobik 有效。
标签: delphi animation alignment panel