アニメーション
最後の例では、タイマーを使ってアニメーションを作成します。
目的
選択ボックスをアニメーション表示し、枠線をフラッシュさせます。
方法
多くの描画ソフトウェアで選択ボックスがアニメーション表示されていることに気付いていましたか? どんな仕組みになっているか考えたことはありますか? 以下の簡単な例を見れば、このアニメーションを再現する方法がわかります。
これは単なるアニメーションとは少し違います。選択ボックスの位置、現在のアニメーションのステータス、およびその他いくつかの項目を記録しておく必要があります。
今回の例では、選択ボックスの描画と設定のコードについては説明せず、描画した後でそれをどのように動かすかという部分を取り上げます。
プロジェクト内で、フォームにピクチャボックスを追加し、フォーム全体を覆うように配置します。選択ボックスを作成するためのMouseUpおよびMouseDownイベントを追加します(実際のコードはダウンロード用のプロジェクトに含まれています)。フォームにタイマーを追加します。
選択ボックスの位置とサイズは、マウスクリック関連のイベントを通じて変数に格納しておきます。この変数は、選択ボックスアニメーションの上端、左端、幅、および高さの値を格納します。
選択ボックスの範囲が決まったら、タイマーを起動してアニメーションを実行します。マウスがクリックされたらタイマーを停止し、それによってアニメーションが停止するので、選択ボックスは元の状態に戻ります。
[General] Private Type RECT Left As Long Top As Long Width As Long Height As Long End Type Private SelRect As RECT Private SelRect_S As Boolean [Picture1_MouseDown] If Button = vbLeftButton Then Timer1.Enabled = False If SelRect_S Then Picture1.DrawStyle = vbSolid Picture1.Line (SelRect.Left, SelRect.Top)- _ (SelRect.Left + SelRect.Width, SelRect.Top + _ SelRect.Height), , B Picture1.DrawStyle = SelDrawType End If End If [Picture1_MouseUp] If Button = vbLeftButton Then Timer1.Enabled = True Timer1.Interval = 10 End If [Timer1_Timer] SelRect_S = Not (SelRect_S) Picture1.DrawStyle = vbSolid Picture1.DrawMode = 6 'inverted Picture1.Line (SelRect.Left, SelRect.Top)-(SelRect.Left + _ SelRect.Width, SelRect.Top + SelRect.Height), , B Picture1.DrawStyle = SelDrawType
このアニメーションでは、単純に選択ボックスを一定の間隔で反転表示させています。ダウンロード用のプロジェクトでは選択ボックスが破線になっているので、アニメーションにするとちょうどよい視覚的効果が得られます。
終わりに
一見したところ、タイマーコントロールは実用性がないように見えるかもしれません。初心者は最初にこれをストップウォッチタイマーであると誤解してしまうため、そのような使い方をしようとします。しかしこれがストップウォッチのような動作をせず、しかもその機能を実現するにはさまざまなコーディングが必要だと気付いた後は、多くの初級者がタイマーを役に立たないコントロールとしてそのまま脇に追いやり、CPUとアプリケーションを酷使する、長々しいループを多用した関数を使うことになります。
タイマーと、ここに挙げた例をきちんと理解すれば、アプリケーションとCPU使用量のどちらの点でも、タイマーの使用がどれほど効果的であるかがわかるでしょう。
この記事のダウンロード用プロジェクトには、それぞれ異なる時間間隔で使用される5つのタイマー機能が含まれています。
- 時刻の表示
- 画像の移動
- 選択ボックスのアニメーション
- シンプルな線画アニメーション
- カウントダウンタイマー
これらの例をタイマーの活用に役立てていただければと思っています。
