我有一个带有一个FadeIn Timer和一个FadeOut Timer的项目。我的表单由FadeIn Timer创建,由FadeOut Timer关闭。最初启用FadeIn Timer并禁用FadeOut Timer。淡入定时器代码:
if MainForm.AlphaBlendValue >= 235 then
Timer01.Enabled := false
else
MainForm.AlphaBlendValue := MainForm.AlphaBlendValue + 5;
FadeOut定时器代码:
if MainForm.AlphaBlendValue <= 0 then
Timer02.Enabled := false
else
MainForm.AlphaBlendValue := MainForm.AlphaBlendValue - 5;
close;
我的要求是,如果单击标题栏的“X”按钮,FadeOut Timer将处于活动状态。所以我定义了
if Msg.Result=htClose then
FadeOutTimer.Enabled:=true;
但它不起作用。请帮帮我。
答案 0 :(得分:3)
如果表单立即关闭,那么您需要一个全局表单变量,如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;
&LT;&LT;&LT; 2012/07/17编辑&gt;&gt;&gt;
当用户单击表单上的“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;
答案 1 :(得分:1)
我认为这是James L's answer的正确淡出代码:
procedure Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FAllowClose then
begin
CanClose := True;
Exit;
end;
CanClose := False;
FadeOut.Enabled := True;
end;
procedure Form.FadeOutOnTimer(Sender: TObject);
begin
if MainForm.AlphaBlendValue <= 0 then
begin
FadeOut.Enabled := false
FAllowClose := True;
Self.Close
end
else
MainForm.AlphaBlendValue := MainForm.AlphaBlendValue - 5;
end;