出现效果,第二次显示窗口时

时间:2013-06-29 06:26:27

标签: delphi delphi-xe

我需要知道Windows 7中奇怪行为的原因(以及可能的解决方法)。 我有Form1上有一个按钮,还有一个名为Form2的第二个窗体。在按钮的点击处理程序中我:

Form2.Show;

运行我的程序后,第一次单击按钮时,我的Form2显示出一个很好的淡入效果(抱歉,我不知道Windows 7中的确切效果名称。如果你知道,请告诉我!) 。好。我关闭Form2并再次点击该按钮。此时Form2似乎完全没有效果。

我希望每次单击按钮时,我的Form2都会显示该效果。更具体地说,当用户点击托盘图标时,我需要显示真实应用程序的主要形式。第一次单击托盘图标会显示带有动画的窗口,但第二次没有。我该如何解决?

2 个答案:

答案 0 :(得分:4)

Windows在第一次显示窗口时显示该动画。因此,您需要做的就是确保每次显示表单时,首次显示关联的窗口。

您可以在关闭时销毁表单,并在需要再次显示时创建新实例。但是,根据表单管理状态的方式,这可能会给您带来不便。从你的编辑和评论来看,当你关闭它时,你不能破坏它。相反,每次显示时,都需要强制为表单创建一个新窗口。

例如,在表单的DestroyHandle事件中添加对OnClose的调用。或者在显示窗口之前立即拨打RecreateWnd。请注意,后者将涉及使受保护的方法RecreateWnd对于在表单上调用Show的人可见。

答案 1 :(得分:3)

从自动创建列表中删除Form2。 (Project->Options->Forms,点击左侧窗格中的Form2,然后点击标有>的按钮将其移至右侧。)

更改ButtonClick处理程序:

procedure TForm1.Button1Click(Sender: TObject);
var
  TempFrm: TForm2;
begin
  TempFrm := TForm2.Create(nil);
  TempForm.Show;
end;

FormClose添加TForm2个事件(当你在它时,删除Form2: TForm2;子句上方的全局implementation变量,这样你就不用了它又错了)::

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

作为备注:您应该转到底部Tools->Options->VCL Designer的{​​{1}}和取消选中 Auto create forms and data modules。自动创建表单几乎总是一个坏主意;我唯一允许自动创建(除了主窗体)是任何需要立即可用的Module creation options,我将它移动到您在第一个看到的自动创建列表的顶部段落,以便它在主表单之前创建。