当我的表单显示时,Windows Vista和7个动作效果仅应用一次。为什么?

时间:2010-12-17 12:48:06

标签: windows delphi animation window aero

我用两种形式创建了一个应用程序。第一个是主要形式,第二个是隐藏。 我在Form1上放了一个按钮,然后我把ShowModal作为第二个表单。在Win7上,表单显示动画。然后我关闭出现的表单(Form2),然后再次单击该按钮。 Form2在没有动画的情况下出现。我每次都想要动画。我该怎么办?

3 个答案:

答案 0 :(得分:3)

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(self) do
    try
      ShowModal;
    finally
      Free;
    end;
end;

在我看来,大多数情况下,模态形式实际上应该是手动创建的。

答案 1 :(得分:1)

好吧,你可以选择不担心它!或者,一个非常快速的黑客将是每次关闭时释放表单,因为动画似乎只在第一次显示表单时运行。

编辑:另一种方法是在表单关闭时调用DestroyHandle。我现在在猜,但我想Windows会在窗口的某处记录一个标志,表明动画已经显示出来。设置此标志后,动画永远不会再次显示。

答案 2 :(得分:0)

作为一种替代方式,可以通过发送表单风格已更改的通知来欺骗窗口,这将使Windows重置"秘密标记"对于当前形式的处理。因此,在显示已经创建的表单时,将再次应用酷炫效果动画。但是,我不能说这样做会带来什么负面影响。

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;

注意:代码具有类助手功能,旧功能可能无法使用此功能/关键字。