如果表单立即关闭,那么您需要一个全局表单变量,就像FAllowClose
您False
在创建表单时设置的那样。然后你需要为Form.CloseQuery
事件编写代码。像这样简单的东西应该可以工作:
procedure Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FAllowClose then
Exit;
CanClose := False;
FadeOut.Enabled := True;
end;
procedure Form.FadeOutOnTimer(Sender: TObject);
begin
// do fade out
FAllowClose := True;
Self.Close
end;
<<< 2012/07/17 编辑 >>>
当用户单击表单上的“X”按钮时,阻止表单关闭的唯一方法是在OnCloseQuery
事件中取消它。然后,当您完成淡出表单时,关闭表单。您将需要一个全局变量FAllowClose
来OnCloseQuery
表示您正在关闭表单而不是用户的事件。这段代码更具说明性,应该处理用户在“X”淡出时再次单击它的情况。
interface
type TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FadeOutTimer(Sender: TObject);
private
FAllowClose: Boolean;
public
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
FAllowClose := False;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FAllowClose then // <- is 'False' when user clicks "X"
Exit;
CanClose := False; // <- cancels close when user clicks "X"
FadeOut.Enabled := True;
end;
procedure TForm1.FadeOutTimer(Sender: TObject);
begin
if Form1.AlphaBlendValue > 0 then
Form1.AlphaBlendValue := Form1.AlphaBlendValue - 5
else
begin
FadeOut.Enabled := False;
FAllowClose := True;
Self.Close;
end;
end;