アニメーションコントロール

全体作業率がわからないときユーザーに対して
プログラム動作中であることを示すアニメーションコントロールを
Visual Basicで作成します。
アニメーションはファイルのコピーなどでよく使われていますよね...。
全 体 の 流 れ
@Formにアニメーションコントロールウィンドウを作成
Aボタンを押したら再生
B終了するときにアニメーションを終了させてウィンドウを破棄する。
これだけで基本的にはできます。簡単でしょ。これだけなら...(?)
作る前の下準備
さてさて。今回は下準備をしなくてはなりません。
この下準備はほとんどのVisual Basicプログラマーはしたことがないでしょう。
むしろ知っている人が少ないはずです。多分。

そんなに大変なのか!というとそんなでもありません。 @まず表示させたいAviファイルを用意してください。 あまりファイルサイズの大きいものを用意しないほうが身のためでしょう。 またファイルは無圧縮・RLE圧縮のものに限ります。 簡単なもので結構です。
A次にこのAviファイルをExeの中に含んでしまうためにリソースファイルに変換します。 そもそもリソースって何?っていう方は他の本で読んでください。 簡単にいえばアイコンなどです。今回はアイコンではなくアニメーションです。 さてリソースファイルに変換するにはリソースコンパイラでコンパイルします。 まずVisual BasicのCD-ROMを用意しましょう。(Learning Editonで十分です) そのCD-ROMのなかに以下のファイルが含まれていますのでどこかにフォルダを作って コピーしておいてください。
ファイル名内容
RC.EXEリソースコンパイラ
RC.DLLコンパイル時に必要なDLL
他にヘルプファイルがほしい方は他の本を読むかVisual C++に含まれています。 そちらを参照してください。
で、ページがもったいないので簡単に説明します。 まず[メモ帳]などのテキストエディタで以下の一行を記述してtest.rcと いう名前で保存してください。
sample_avi AVI "(用意したAviファイルのパス)"
用意したAviファイルをリソースファイルに変換するには リソースコンパイラにコマンドラインを指定してコンパイルします。 [スタート]ー[プログラム(P)]ー[アクセサリ]のあたりに[コマンドプロント]があるので それを使って以下のコマンドラインを実行してください。
rc.exe /r test.rc
このホームページはとりあえずVisual Basicのことは 大抵のことはできるという人を対象にしているので これだけ記述しておけば理解していただけるでしょう。 エラーがなければtest.resというだいるが生成されます。
B最後にこのファイルをVisual Basicのメニューから [プロジェクト(P)]-[ファイルの追加...]から追加してください。 これで準備完了です。とりあえずここまでご苦労様です。
プログレスバーメッセージの送信
アニメーションコントロールにメッセージを送るにはSendMessage()関数を使います。
基本的に送るメッセージは以下のとおりです。
メッセージ意味wParamlParam戻り値
ACM_OPENAviファイル(or リソース)を開く0ファイル名(またはリソース名)成功したとき 1
エラーのとき 0
ACM_PLAYアニメーションを再生する繰り返しの回数
0以上(0のときは再生しない)
-1のとき無限に繰り返す
上位ワード フレームの開始(0から)
下位ワード フレームの終端
-1のとき全フレームを再生する
成功したとき 1
エラーのとき 0
ACM_STOPアニメーションを停止する00成功したとき 1
エラーのとき 0
サンプルではリソースで再生しているので
全体的にリソースを使って再生する方法を基準に
解説していますが
ファイル名を直接指定して再生することもできます。
以下にコードを示しますので参考にしてください。
==================== Form1 ====================
Dim FileName As String, rc As Long
FileName="sample.avi"       '相対パスでも絶対パスでも可能

'アニメーションを再生させる
Private Sub Command1_Click()
'アニメーションコントロールウィンドウの作成
hWnd = CreateWindowsEx(0, ANIMATE_CLASS, 0, WS_CHILD  or WS_VISIBLE , _
           10, 10, 100, 100, Me.hWnd, 0, 0, 0)
'AVIファイルを開く
Call SendMessage(hWnd, ACM_OPEN, 0, FileName)
'AVIクリップの再生
Call SendMessage(hWnd, ACM_PLAY, 0, -1)
End Sub

Private Sub Command2_Click()
'アニメーションを停止する
Call SendMessage(hWnd, ACM_STOP, 0, 0)

'ウィンドウの破棄
Call DestroyWindow(hWnd)
End Sub
==================== Module1 ====================
Public hWnd As Long
補足ですが、リソースを使って再生するときは実行可能ファイルに コンパイルしてから実行しないと結果が得られません。
アニメーションコントロールのスタイル
アニメーションコントロールを作成するときに指定します。
スタイル内容
ACS_CENTERAviクリップをウィンドウの中央で再生します
指定しないときAviクリップのサイズに自動的に変更されます
ACS_TRANSPARENTAviクリップで指定されている背景色ではなく
透明な背景を使って再生する
ACS_AUTOPLAYAviクリップを開くと同時に再生する
サンプル
ダウンロード(Animation.lzh 2.52MB)