速度の調整や数値の設定などのとき全体が見えると入力しやすいものです。 そんなときはこのトラックバーを使用すると便利でしょう。 スクロールバーと似ていますが、列記としたコモンコントロールの一種です。 このサンプルは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()関数を使います。 基本的に送るメッセージは以下のとおりです(全部ではないです)。
| メッセージ | 意味 | wParam | lParam |
| TBM_GETPOS | 現在位置を取得 | 0 | 0 |
| TBM_GETRANGEMAX | トラックバーの範囲の最大値を取得 | 0 | 0 |
| TBM_GETRANGEMIX | トラックバーの範囲の最小値を取得 | 0 | 0 |
| 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