使用Timer最小化和恢复Delphi表单

时间:2012-07-26 18:57:50

标签: delphi delphi-xe2

我是德尔福学习者。我有一个带有“MainForm”,“MinimizeTimer”和“RestoreTimer”的Delphi Progect。我已经定义了以下代码。

最小化计时器:

  if MainForm.AlphaBlendValue >= 225 then
  begin
    MinimizeTimer.Enabled := true;
    MainForm.AlphaBlendValue := MainForm.AlphaBlendValue - 5;
  end;

恢复计时器:

  if MainForm.AlphaBlendValue >= 0 then
  begin
    RestoreTimer.Enabled := true;
    MainForm.AlphaBlendValue := MainForm.AlphaBlendValue + 5;
  end;

我的要求是MainForm将首先使用“MinimizeTimer”淡出,然后在按下Caption Bar上的“ _ ”按钮时最小化。并使用“RestoreTimer”进行淡化,然后在单击任务栏后恢复。所以我再次定义了以下代码:

  private
    { Private declarations }
    procedure WMSysCommand(var Msg: TWMSysCommand) ; message WM_SYSCOMMAND;
..
..
..
..
..
procedure TMainForm.WMSysCommand(var Msg: TWMSysCommand) ;
begin
  if Msg.CmdType = SC_MINIMIZE then MinimizeTimer.Enabled := true;
  DefaultHandler(Msg);
  if Msg.CmdType = SC_RESTORE then RestoreTimer.Enabled := true;
  DefaultHandler(Msg);
end;

但我没有得到预期的结果。 MainForm以常规方式最小化和恢复。请记住,在我的项目中,我还有一个“FormCloseQuery”事件。

请帮帮我。

1 个答案:

答案 0 :(得分:4)

您使用错误的逻辑来满足您的要求。试试这个:

procedure TMainForm.MinimizeTimerTimer(Sender: TObject);
begin
  if AlphaBlendValue > 0 then
  begin
    AlphaBlendValue := AlphaBlendValue - 5;
  end
  else
  begin
    MinimizeTimer.Enabled := False;
    Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);
  end;
end;

procedure TMainForm.RestoreTimerTimer(Sender: TObject);
begin
  if AlphaBlendValue < 255 then
  begin
    AlphaBlendValue := AlphaBlendValue + 5;
  end else begin
    RestoreTimer.Enabled := False;
  end;
end;

procedure TMainForm.WMSysCommand(var Msg: TWMSysCommand);
begin
  case Msg.CmdType of
    SC_MINIMIZE: begin
      if AlphaBlendValue > 0 then
      begin
        MinimizeTimer.Enabled := True;
        Exit;
      end;
    end;
    SC_RESTORE: begin
      if AlphaBlendValue < 255 then begin
        RestoreTimer.Enabled := True;
      end;
    end;
  end;
  inherited;
end;