質問

いくつかの簡単なアニメーションに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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top