首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Vista和7运动效果仅在显示我的窗体时应用一次。为什么?

Windows Vista和7运动效果仅在显示我的窗体时应用一次。为什么?
EN

Stack Overflow用户
提问于 2010-12-17 20:48:06
回答 3查看 626关注 0票数 4

我创建了一个具有两个表单的应用程序。第一个是主表单,第二个是隐藏表单。我在Form1上放置了一个按钮,并将其设置为ShowModal第二个表单。在Win7上,表单以动画形式出现。然后,我关闭出现的表单(Form2)并再次单击该按钮。将显示Form2,但不显示动画。我每次都想要动画。我该怎么办?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-17 20:55:50

我现在唯一能想到的就是每次你想要以模态方式显示它时,手动创建表单。为此,请转到项目选项,并确保窗体不是自动创建的。那就这么做

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(self) do
    try
      ShowModal;
    finally
      Free;
    end;
end;

在我看来,大多数情况下,模态表单实际上应该手动创建。

票数 3
EN

Stack Overflow用户

发布于 2010-12-17 20:54:11

好吧,你可以选择不去担心它!或者,一种非常快速的方法是在窗体每次关闭时释放它,因为动画似乎只在窗体第一次显示时运行。

编辑:另一种方法是每当窗体关闭时在窗体上调用DestroyHandle。我现在正在猜测,但我想象Windows在窗口中的某个地方记录了一个标志,指示动画已经显示。一旦设置了该标志,动画就再也不会显示了。

票数 1
EN

Stack Overflow用户

发布于 2014-11-28 03:03:58

作为一种替代方法,可以通过发送窗体样式已更改的通知来欺骗windows,这将使windows为当前窗体的句柄重置“秘密标志”。因此,在显示已经创建的表单时,将再次应用酷炫的显示效果动画。然而,我不能说这样做会造成什么负面影响。

代码语言:javascript
复制
uses
  Winapi.Windows, Vcl.Controls;

type
  TFormHelper = class helper for TForm
  public
    procedure Show;
  end;

implementation

procedure TFormHelper.Show;
begin
  SendMessage(Handle,CM_CUSTOMSTYLECHANGED,0,0);
  inherited Show;
end;

注释:带有类帮助器的代码,此功能/关键字可能在较早的IDE中不可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4470584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档