我需要知道Windows 7中奇怪行为的原因(以及可能的解决方法)。 我有Form1上有一个按钮,还有一个名为Form2的第二个窗体。在按钮的点击处理程序中我:
Form2.Show;
运行我的程序后,第一次单击按钮时,我的Form2显示出一个很好的淡入效果(抱歉,我不知道Windows 7中的确切效果名称。如果你知道,请告诉我!) 。好。我关闭Form2
并再次点击该按钮。此时Form2
似乎完全没有效果。
我希望每次单击按钮时,我的Form2都会显示该效果。更具体地说,当用户点击托盘图标时,我需要显示真实应用程序的主要形式。第一次单击托盘图标会显示带有动画的窗口,但第二次没有。我该如何解决?
答案 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
,我将它移动到您在第一个看到的自动创建列表的顶部段落,以便它在主表单之前创建。