TTimer(timAnimateDataChange)を備えたTFrame(fraDisplay)があります。タイマーは、小さなアニメーションを制御するために使用されます。フレームを含むフォームで、次のようなメソッドが必要です。
procedure TForm.DoStuff;
begin
DoSomeLogicStuff;
fraDisplay.AnimateResult;
WaitForAnimationToFinish;
DoSomeOtherLogicStuff;
fraDisplay.AnimateEndResult;
WaitForAnimationToFinish;
fraDisplay.Finalize;
end;
アニメーションは基本的にTImage32の再描画であり、タイマーによって計時されます。タイマーは終了時にそれ自体を無効にし、フレームにはAnimationRunningと呼ばれるブールプロパティがあり、アニメーションが終了するとfalseに設定されます。
問題を複雑にしたり助けたりするスレッドなどはありません。
問題は、WaitForAnimationToFinishメソッドをどのように実装するかです。
(ところで、これは良い解決策ではありません:
procedure TForm.WaitForAnimationToFinish;
begin
repeat
Application.ProcessMessages;
until not fraDisplay.AnimationRunning;
end;
メソッドの実行中はタイマーが起動しないため:-()