1

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

Form2.Show;

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

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

4

2 回答 2

4

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

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

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

于 2013-06-29T07:42:19.960 回答
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,然后取消选中 Auto create forms and data modules底部Module creation options的。自动创建表单几乎总是一个坏主意。我唯一允许自动创建的东西(除了主窗体)是任何TDataModule需要立即可用的东西,我将它移动到您在第一段中看到的自动创建列表的顶部,以便创建它在主窗体之前。

于 2013-06-29T06:42:19.893 回答