Delphi:AnimateWindow就像在FireFox中一样
发布时间:2020-12-15 09:46:05 所属栏目:大数据 来源:网络整理
导读:我有一个面板(底部对齐)和一些控件(客户端对齐). 要为我使用的面板设置动画: AnimateWindow(Panel.Handle,1000,aw_hide or AW_SLIDE OR AW_VER_POSITIVE);panel.Visible:=false; 在我的情况下,面板平滑地隐藏,然后只有其他控件占用它的空间. 但我希望其他控
我有一个面板(底部对齐)和一些控件(客户端对齐).
要为我使用的面板设置动画: AnimateWindow(Panel.Handle,1000,aw_hide or AW_SLIDE OR AW_VER_POSITIVE); panel.Visible:=false; 在我的情况下,面板平滑地隐藏,然后只有其他控件占用它的空间. 但我希望其他控件能够顺畅地与面板同时移动. 例如,FireFox使用此效果. 谁能建议我有用的东西?谢谢! 解决方法
AnimateWindow是一个同步函数,它在动画结束前不会返回.这意味着在dwTime参数中指定的时间内,没有对齐代码将运行,并且’alClient’对齐的控件将保持静止,直到动画结束.
我建议改用计时器.举个例子: type TForm1 = class(TForm) .. private FPanelHeight: Integer; FPanelVisible: Boolean; .. procedure TForm1.FormCreate(Sender: TObject); begin FPanelHeight := Panel1.Height; Timer1.Enabled := False; Timer1.Interval := 10; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := True; FPanelVisible := not FPanelVisible; end; procedure TForm1.Timer1Timer(Sender: TObject); const Diff: array [Boolean] of Integer = (-1,1); begin Panel1.Height := Panel1.Height - Diff[FPanelVisible]; Panel1.Visible := Panel1.Height > 0; Timer1.Enabled := (Panel1.Height > 0) and (Panel1.Height < FPanelHeight); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |