質問
いくつかの簡単なアニメーションにOnIdle-eventを使用していますが、問題なく動作します。 ただし、ユーザーがウィンドウの移動またはサイズ変更を開始すると、移動/サイズ変更操作が完了するまでOnIdleイベントが発生しなくなります。
すべてのアニメーションを一時停止できるように、これがいつ発生するかを検出する必要があります。しかし、ウィンドウの動きをどのように検出するのですか?
解決
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;
他のヒント
これを試したことはありませんが、おそらくウィンドウが移動されているかどうかを知るためにWM_WINDOWPOSCHANGINGを使用できると思います。 http://msdn.microsoft.com/en-us /library/ms632653(VS.85).aspx
Delphiコードは次のようになります。
TSomeForm = class(TForm)
protected
...
procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;
...
end;
所属していません StackOverflow