プログレスバー

インストールのときに全体の作業率を表示するプログレスバーを
Visual BasicでAPIだけで実現するサンプルです。
コモンコントロールシリーズで特に簡単に作れるサンプルです。
全 体 の 流 れ
@Formにプログレスバーウィンドウを作成
A数値の範囲とステップを設定
これだけでカウントできます。簡単でしょ。
プログレスバーメッセージの送信
プログレスバーにメッセージを送るにはSendMessage()関数を使います。
基本的に送るメッセージは以下のとおりです。
メッセージ意味wParamlParam戻り値
PBM_SETRANGE範囲を設定する0上位ワードに最大値
下位ワードに最小値
以前の範囲
PBM_SETPOSプログレスバーの位置を設定する新しい位置0以前の位置
PBM_SETSTEPステップを設定する新しいステップ値0以前のステップ
PBM_STEPITステップ値単位で1つ進める000
デフォルトの範囲は0〜100になっていますが、プログラムから0〜65,535まで設定可能です。 一般的にはプログレスバーを勧める場合はPBM_STEPITメッセージを送ります。 プログレスバーは設定されているステップにしたがってプログレスバーを進めます。 デフォルトのステップ値は10です。
プログレスバーのスタイル
プログレスバーにはもともとはスタイルオプションがありませんでした。
Windows95以降にスタイルオプションが追加されて滑らかなプログレスバー垂直プログレスバーが可能になりました。
滑らかなプログレスバーのスタイルはPBS_SMOOTHを指定します。
垂直なプログレスバーのスタイルはPBS_VERTICALを指定します。
サンプルでは滑らかなプログレスバーを実現しています。
サンプル
ダウンロード(ProgressBar.lzh 4.36KB)
Dim cnt As Long         'カウント用

Private Sub Command1_Click()
'プログレスバーの値を0にする
Call SendMessage(hProgWnd, PBM_SETPOS, 0, 0)
cnt = 0
'タイマーイベントを許可
Me.Timer1.Interval = 100        '100ミリ秒
Me.Timer1.Enabled = True
'コマンドボタンの無効化
Me.Command1.Enabled = False

End Sub

Private Sub Form_Load() 'タイマーイベントを禁止 Me.Timer1.Enabled = False 'コモンコントロールを初期化する Dim cc As tagINITCOMMONCONTROLSEX cc.dwSize = Len(cc) cc.dwICC = ICC_PROGRESS_CLASS 'プログレスバーの作成 hProgWnd = CreateWindowEx(0, PROGRESS_CLASS, "Progress Bar", _ WS_CHILD Or WS_VISIBLE Or WS_BORDER Or PBS_SMOOTH, _ 10, 10, 290, 20, Me.hWnd, 0, App.hInstance, 0) '範囲の設定(0〜100) Call SendMessage(hProgWnd, PBM_SETRANGE, 0, GetLong(100, 0)) 'ステップの設定 Call SendMessage(hProgWnd, PBM_SETSTEP, 1, 0) End Sub
Private Sub Timer1_Timer() 'プログレスバーのカウント cnt = cnt + 1 Call SendMessage(hProgWnd, PBM_SETPOS, cnt, 0) Me.Label1.Caption = Str(cnt) + "%" If cnt > 99 Then 'カウントを終了 cnt = 0 Me.Timer1.Enabled = False Me.Command1.Enabled = True MsgBox "終了しました" End If End Sub