トラックバー(別名:スライダコントロール)

速度の調整や数値の設定などのとき全体が見えると入力しやすいものです。
そんなときはこのトラックバーを使用すると便利でしょう。
スクロールバーと似ていますが、列記としたコモンコントロールの一種です。
このサンプルはVB5以上のみで実現できます
全 体 の 流 れ
@Formのウィンドウプロシージャを変更
AFormにトラックバーコントロールを作成する
B現在位置と範囲を設定する
Cウィンドウプロシージャはトラックバーが変化したら数値を表示する
ちょっと面倒ですが、一度できれば簡単です
トラックバーの作成
ウィンドウプロシージャの変更はSetWindowLong()関数を参照してください。
トラックバーを作成するにはCreateWindowEx()関数を使います。
トラックバーのスタイル
トラックバーを作成するときにさまざまなスタイルオプションを
複数指定することができます。以下の表に代表的なものを示します。
スタイル内容
TBS_AUTOTICKSトラックバーにティックマークを自動的に表示する
TBS_HORZトラックバーを水平にする(デフォルト)
TBS_VERTトラックバーを垂直にする
TBS_BOTTOMティックマークをバーの下部に表示する(デフォルト)
TBS_TOPテックマークをバーの上部に表示する
TBS_LEFTティックマークをバーの左側に表示する
TBS_RIGHTティックマークをバーの右側に表示する
(垂直トラックバーのときのデフォルト)
TBS_BOTHバーの両側にティックマークをつける
TBS_TOOLTIPトラックバーにツールチップを含める
ちなみにティックマークとは小さな目盛りのことです。
メッセージの送信
トラックバーにメッセージを送るにはSendMessage()関数を使います。
基本的に送るメッセージは以下のとおりです(全部ではないです)。
メッセージ意味wParamlParam
TBM_GETPOS現在位置を取得00
TBM_GETRANGEMAXトラックバーの範囲の最大値を取得00
TBM_GETRANGEMIXトラックバーの範囲の最小値を取得00
TBM_SETPOS現在位置を設定再描画をするときは1
しないときは 0
新しい位置
TBM_SETRANGEトラックバーの範囲を設定再描画をするときは1
しないときは 0
下位ワードに最小値
上位ワードに最大値
TBM_SETRANGEMAXトラックバーの範囲の最大値を設定再描画をするときは1
しないときは 0
設定する最大値
TBM_SETRANGEMINトラックバーの範囲の最小値を設定再描画をするときは1
しないときは 0
設定する最小値
TBM_SETTIPSIDEツールヒントを表示する位置を設定TBTS_TOP
TBTS_BOTTOM
TBTS_LEFTのどれか一つ
TBTS_RIGHT
0
メッセージの送信
ユーザーがトラックバーにアクセスすると
水平トラックバーのときはWM_HSCROLLメッセージ
垂直スクロールバーのときはWM_VSCROLLメッセージが発生します。
wParamの下位ワードにはトラックバーからの通知メッセージが含まれています。
通知メッセージがTB_THUMBPOSITIONまたはTB_THUMBTRACK以外のときは
wParamの上位ワードには0が格納されています。
それ以外はwParamの上位ワードには、バーの現在位置が格納されています。
lParamにはメッセージを発行したトラックバーのハンドルが格納されています。
以下に一般的な通知メッセージを示します。
メッセージ意味
TB_BOTTOM現在位置を取得
TB_ENDTRACKトラックバーの終点
TB_LINEDOWNユーザーが左または下向きの矢印キーを押した
TB_LINEUPユーザーが右または上向きの矢印キーを押した
TB_PAGEUPユーザーが[Page Up]キーを押した
またはスライダーの手前をクリックした
TB_PAGEDOWN同、[Page Down] または後ろをクリック
TB_THUMBPOSITIONユーザーがマウスを使ってスライダーを動かした
TB_THUMBTRACKユーザーがマウスを使ってスライダーをドラッグした
TB_TOPユーザーが[Home]キーを押した
サンプル
ダウンロード(TrackBar.lzh 8.33KB)
Private Sub Form_Load()
'ウィンドウプロシージャのアドレスを変更する
gOrgWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WndProc)
'トラックバーコントロールウィンドを作成する
hTrackBarWnd = CreateWindowEx(0, TRACKBAR_CLASS, "Track Bar", _
    WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or WS_BORDER Or _
    TBS_AUTOTICKS, 0, 70, 300, 30, _
    Me.hWnd, 0, App.hInstance, 0)
'範囲を設定する
Call SendMessage(hTrackBarWnd, TBM_SETRANGE, 1, MAKELONG(0, 10))
'現在位置を設定する
Call SendMessage(hTrackBarWnd, TBM_SETPOS, 1, 10 / 2)
'現在位置を表示する
Me.Text1.Text = SendMessage(hTrackBarWnd, TBM_GETPOS, 0, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer) 'ウィンドウプロシージャのアドレスを元に戻す Call SetWindowLong(Me.hWnd, GWL_WNDPROC, gOrgWndProc) End Sub