9

我正在为一些简单的动画使用 OnIdle 事件,它工作正常。然而,问题是当用户开始移动或调整窗口大小时,OnIdle 事件会停止触发,直到移动/调整大小操作完成。

我需要检测何时发生这种情况,以便我可以暂停所有动画。但是如何检测窗口的移动?

4

2 回答 2

12

我会选择mghie评论:使用动画计时器,并使用消息处理程序激活/停用它。

在您的情况下,您可能需要添加以下消息处理程序:

//fired when starting/ending a "move" or "size" window
procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;


  procedure TForm.WMEnterSizeMove(var msg: TMessage);
  begin
    AnimationTimer.Enabled := false;
    inherited;
  end;

  procedure TForm.WMExitSizeMove(var msg: TMessage);
  begin
    AnimationTimer.Enabled := true;
    inherited;
  end;
于 2009-05-06T08:36:49.063 回答
4

我还没有尝试过,但我想说你可能会使用 WM_WINDOWPOSCHANGING 来判断窗口何时被移动。 http://msdn.microsoft.com/en-us/library/ms632653(VS.85).aspx

德尔福代码将是:

TSomeForm = class(TForm)
protected
  ...
  procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;
  ...
end;
于 2009-05-05T21:05:15.670 回答