;
; モジュール mod_trackbar
;
;トラックボックス操作モジュールです。
;・llmod3.hspを使用する必要がないため、user32.as等との併用が可能です。
;・llmod3.hspのtrackboxモジュールを参考に構築しているため、trackbox.hspとの併用はできません。
;・winobj命令を使用しているため、通常のオブジェクト同様にclrobj命令やcls命令、objsize命令などが使用できます。
;・trackpsz命令、tracklin命令を追加しました。
;・trackbox命令に拡張ウィンドウスタイルを追加。
;
; mod_trackbarモジュール命令一覧
;
; trackbox トラックボックスの作成
; sel_trackbox 操作するトラックボックスを選択
; trackpos トラックボックスのつまみの位置の設定と取得
; trackrng トラックボックスの範囲の設定と取得
; trackmrk トラックボックスの目盛りの設定と取得
; tracksel トラックボックスの選択範囲の設定と取得
; trackpsz トラックボックスのページサイズの設定と取得
; tracklin トラックボックスのラインサイズの設定と取得
;
;#####################################################################
#module "_trackbox"
; 用語解説
;スライダー : トラックバーのつまみ
;チックマーク : 目盛り
;ページサイズ : スライダの横側をクリックしたときにスライダが動く単位
;ラインサイズ : 矢印キーでスライダーが移動する移動量。
;
; メッセージ
;
#define TBM_GETPOS 0x00400 ;スライダーの位置を取得
#define TBM_GETRANGEMIN 0x00401 ;スライダーの位置の最小位置の取得
#define TBM_GETRANGEMAX 0x00402 ;スライダーの位置の最大位置の取得
#define TBM_GETTIC 0x00403 ;特定のチックマークの位置を取得
#define TBM_SETTIC 0x00404 ;特定のチックマークの位置を設定
#define TBM_SETPOS 0x00405 ;スライダーの位置を設定
#define TBM_SETRANGE 0x00406 ;スライダー位置の可変範囲の設定
#define TBM_SETRANGEMIN 0x00407 ;スライダー位置の可変範囲の最小値の設定
#define TBM_SETRANGEMAX 0x00408 ;スライダー位置の可変範囲の最大値の設定
#define TBM_CLEARTICS 0x00409 ;現在のチックマークを削除
;#define TBM_SETSEL 0x0040A ;チックマークの選択範囲の設定
#define TBM_SETSELSTART 0x0040B ;チックマークの選択範囲の終了値の設定
#define TBM_SETSELEND 0x0040C ;チックマークの選択範囲の開始値の設定
;#define TBM_GETPTICS 0x0040E ;チックマーク位置を示す配列を指すポインタの取得
;#define TBM_GETTICPOS 0x0040F ;チックマークの物理位置の取得
#define TBM_GETNUMTICS 0x00410 ;チックマークの数の取得
#define TBM_GETSELSTART 0x00411 ;選択範囲の開始位置の取得
#define TBM_GETSELEND 0x00412 ;選択範囲の終了位置の取得
#define TBM_CLEARSEL 0x00413 ;選択範囲の解除
#define TBM_SETTICFREQ 0x00414 ;チックマークの間隔の設定
#define TBM_SETPAGESIZE 0x00415 ;ページサイズの設定
#define TBM_GETPAGESIZE 0x00416 ;ページサイズの取得
#define TBM_SETLINESIZE 0x00417 ;ラインサイズの設定
#define TBM_GETLINESIZE 0x00418 ;ラインサイズの取得
;#define TBM_GETTHUMBRECT 0x00419 ;つまみの境界矩形の取得
;#define TBM_GETCHANNELRECT 0x0041A ;スライダーが動くチャンネルの境界矩形の取得
;#define TBM_SETTHUMBLENGTH 0x0041B ;つまみの長さの設定
;#define TBM_GETTHUMBLENGTH 0x0041C ;つまみの長さの取得
;
; 拡張ウィンドウスタイル
;
#define WS_EX_DLGMODALFRAME 0x00000001 ;二重の境界線
#define WS_EX_CLIENTEDGE 0x00000200 ;縁が沈んで見える境界線
#define WS_EX_STATICEDGE 0x00020000 ;ユーザーの入力を受け付けない項目用の、立体的に見える境界スタイル
;---------------------------------------
;
; 操作するトラックボックスを選択
;
;sel_trackbox int p_objid
;p_objid :トラックバーのオブジェクトID
;
;この命令使用後はn1で指定したトラックボックスに対して各操作を行います。
;トラックボックス新規に作成すると、自動的にそのトラックボックスが各操作の対象になります。
;複数のトラックボックスを作成したときは、この命令で操作するトラックボックスを選択してください。
;
#deffunc sel_trackbox int p_objid
stt = tb_objid
tb_objid = p_objid
return stt
;---------------------------------------
;
; トラックバーの作成
;
;trackbox int p_sx, int p_sy, int p_style, int p_exstyle
;p_sx = 0〜(64) :幅
;p_sy = 0〜(24) :高さ
;p_style = 0〜(0) :スタイル
;p_exstyle = 0〜3(0) :拡張スタイル
;stat : トラックバーのウィンドウハンドル取得
;
;p_styleの値
;0 水平
;1 自動で目盛りを付ける
;2 垂直
;4 '水平'のとき 目盛りを上側に付ける
; '垂直'のとき 目盛りを左側に付ける
;8 目盛りを両側に付ける
;$10 目盛りを付けない
;$20 つまみの部分に選択領域を付ける
;$40 $20 のスタイルのとき、つまみが動いても選択領域を固定したままにする
;$80 つまみなし
;$100 つまみがクリックされているときツールチップを付ける(このスタイルは
; comctl32.dllのバージョンによっては効果がない場合があります。)
;
;p_sx, p_syで配置するX,Yサイズを指定します。サイズの指定が省略されるか0以下の場合は、
;objsizeで設定されている値が使用されます。
;
;p_exstyleの値
;0 デフォルト
;1 二重の境界線
;2 縁が沈んで見える境界線
;4 ユーザーの入力を受け付けない項目用の、立体的に見える境界スタイル
;
;
#deffunc trackbox int p_sx, int p_sy, int p_style, int p_exstyle
; トラックバー設置 (デフォルト範囲は0〜100)
; 拡張スタイル
m = 0
if p_exstyle & 1 : m |= WS_EX_DLGMODALFRAME ;二重の境界線
if p_exstyle & 2 : m |= WS_EX_CLIENTEDGE ;縁が沈んで見える境界線
if p_exstyle & 4 : m |= WS_EX_STATICEDGE ;ユーザーの入力を受け付けない項目用の、立体的に見える境界スタイル
winobj "msctls_trackbar32",
"", m, $
50000000 | p_style, p_sx, p_sy
;このトラックバーのオブジェクトIDを取得
tb_objid = stat
return tb_objid ;オブジェクトID
;---------------------------------------
;
; トラックボックスの範囲の設定と取得
;
;trackrng int p_mim, int p_max, int p_f
;p_mim :最小値
;p_max :最大値
;p_f :範囲を取得するフラグ
;
;トラックボックスの範囲を設定、取得します。
;p_fを1にすると設定範囲の値を取得します。
;
;この命令を呼び出した後のstatの値
;p_fを1にして、p_mimを1にするとtrackboxの最小位置、p_maxを1にすると最大位置がstatに代入されます。
;それ以外はstatは0になります。
;
#deffunc trackrng int p_mim, int p_max, int p_fg
if p_fg {
;p_f!0
if p_mim : m = TBM_GETRANGEMIN : else : m = TBM_GETRANGEMAX
sendmsg objinfo(tb_objid,
2), m,
0,
0 ret = stat
} else {
;p_f=0
sendmsg objinfo(tb_objid,
2),
TBM_SETRANGEMIN,
1, p_mim
sendmsg objinfo(tb_objid,
2),
TBM_SETRANGEMAX,
1, p_max
ret = 0
}
return ret
;---------------------------------------
;
; トラックボックスのつまみの位置の設定と取得
;
;trackpos int p_tbpos,int p_f
;p_tbpos : 設定する位置
;p_f : 位置を取得するフラグ
;
;トラックボックスのつまみの位置を設定します。
;p_fを1にするとつまみの位置を取得します。
;
;この命令を呼び出した後のstatの値
;p_fを1にするとstatにつまみの位置が代入されます。
;それ以外はstatは0になります。
#deffunc trackpos int p_tbpos,int p_f
tbpos = p_tbpos
if(p_f) : m = TBM_GETPOS : v3 = 0 : else : m = TBM_SETPOS : v3 = 1
sendmsg objinfo(tb_objid,
2), m, v3, tbpos
return
;---------------------------------------
;
; トラックボックスの目盛りの設定と取得
;
;trackmrk int p_ticpos, int p_f
;p_ticpos : 目盛りをつける位置
;p_f = 0〜4(0) : フラグ
;
;トラックボックスの目盛りの位置を設定、取得します。
;
;p_fの値 機能
;0 p_ticposで指定した位置に目盛りを付けます。
;1 付けられている目盛りの数を取得します。
;2 間隔をp_ticposで指定した値にして目盛り付けます。ただし、トラックボックスのスタイルを'自動で目盛りを付ける'(1)にしたときのみ有効です。
;3 p_ticpos番目の目盛りの位置を取得します。
;4 付けられている目盛りをすべてクリアします。
;
#deffunc trackmrk int p_ticpos, int p_f
ticpos = p_ticpos
f = p_f
if f {
;TBM_GETNUMTICS 目盛りの数を取得
;TBM_SETTICFREQ 目盛りの間隔をセット
;TBM_GETTIC 目盛りの位置を取得
;TBM_CLEARTICS 目盛りをすべてクリア
;TBM_SETTIC 目盛りをセット
m = 0, TBM_GETNUMTICS, TBM_SETTICFREQ, TBM_GETTIC, TBM_CLEARTICS
m = m(f)
if f = 4 : ticpos = 1 : else : if f = 2 : f = 0
} else {
;TBM_SETTIC 目盛りをセット
m = TBM_SETTIC : f = ticpos : ticpos = 0
}
sendmsg objinfo(tb_objid,
2), m, ticpos, f
return
;---------------------------------------
;
; トラックボックスのページサイズの設定と取得
;
;trackpsz int p_psz
;p_psz :ページサイズ
;p_f :0のとき設定
; 1のときサイズを取得
;
;トラックボックスのページサイズを設定、取得します。
;ページサイズ … スライダの横側をクリックしたときにスライダが動く単位
;
;p_fが0のとき、p_pszで指定したページサイズを指定します。
;statには以前のページサイズが返ります。
;
;p_fが1のとき、現在のページサイズがstatに返ります。
;
#deffunc trackpsz int p_psz, int p_f
psz = p_psz
f = limit(p_f, 0, 1)
;TBM_SETPAGESIZE ページサイズの設定
;TBM_GETPAGESIZE ページサイズの取得
m = TBM_SETPAGESIZE, TBM_GETPAGESIZE
m = m(f)
;ページサイズ設定
if f : psz = 0
sendmsg objinfo(tb_objid,
2), m,
0, psz
return stat
;---------------------------------------
;
; トラックボックスの選択範囲の設定と取得
;
;tracksel int p_min, int p_max, int p_fg
;p_min :最小値
;p_max :最大値
;p_fg :フラグ
;
;トラックボックスの選択範囲を設定、取得します。
;ただし、トラックボックス作成時に'つまみの部分に選択領域を付ける'($20)という
;スタイルを指定している場合に限ります。
;
;p_fgを0にするとp_min-p_maxの範囲を選択します。
;p_fgを1にすると開始位置(p_minの値)のみをセットします。
;p_fgを2にすると終了位置(p_maxの値)のみをセットします。
;p_fgを3にすると選択範囲をクリアします。
;
;この命令を呼び出した後のstatの値
;p_min、p_maxをともに0すると選択開始位置がstatに代入されます。
;p_min、p_maxをともに1すると選択終了位置がstatに代入されます。
;
;
;選択領域をセット(スタイルが$20を持つとき)
;#define TBM_SETSEL 1034 は使わない
;
#deffunc tracksel int p_min, int p_max, int p_fg
min = p_min
max = p_max
fg = p_fg
if min = max {
;選択開始位置取得 min=max=0 #define TBM_GETSELSTART 1041
;選択終了位置取得 min=max=1 #define TBM_GETSELEND 1042
if min : m = TBM_GETSELEND : else : m = TBM_GETSELSTART
min = 0 : max = 0
} else {
a = (fg >> 4) ^ 1 ;Redraw flag fgに$10を足すとRedrawしない
fg = fg & $f
if fg {
m = 0, TBM_SETSELSTART, TBM_SETSELEND, TBM_CLEARSEL
m = m(fg)
if fg = 3 : max = 0 : else : if fg = 1 : max = min
min = a
} else {
sendmsg objinfo(tb_objid,
2),
TBM_SETSELSTART, a, min
sendmsg objinfo(tb_objid,
2),
TBM_SETSELEND, a, max
return 0
}
}
sendmsg objinfo(tb_objid,
2), m, min, max
return
;---------------------------------------
;
; トラックボックスのラインサイズの設定と取得
;
;tracklin int p_psz
;p_psz :ラインサイズ
;p_f :0のとき設定
; 1のときサイズを取得
;
;トラックボックスのラインサイズを設定、取得します。
;ラインサイズ : 矢印キーでスライダーが移動する移動量。
;
;p_fが0のとき、p_pszで指定したラインサイズを指定します。
;statには以前のページサイズが返ります。
;
;p_fが1のとき、現在のラインサイズがstatに返ります。
;
#deffunc tracklin int p_psz, int p_f
psz = p_psz
f = limit(p_f, 0, 1)
;TBM_SETLINESIZE ラインサイズの設定
;TBM_GETLINESIZE ラインサイズの取得
m = TBM_SETLINESIZE, TBM_GETLINESIZE
m = m(f)
;ラインサイズ設定
if f : psz = 0
sendmsg objinfo(tb_objid,
2), m,
0, psz
return stat
#global
;#####################################################################
;---------------------------------------
;
; 実行サンプル
;
;サンプルここから-------------------------------------------
#if 0 ;0以外に設定するとサンプルを実行できます。
;--------------------
;
; 1つ目
;
;トラックボックスの作成
trackbox 200, 40, $101, 2
objid(0) = stat
mes "オブジェクトID:" + objid(
0)
;トラックボックスの範囲の設定と取得
trackrng -180, 180, 0 ;設定
trackrng 1, , 1 ;取得
s = stat
trackrng , 1, 1 ;取得
e = stat
mes "範囲:" + s +
" 〜 " + e
;ラインサイズ変更 30
tracklin 30
tracklin , 1
;--------------------
;
; 2つ目
;
;トラックボックスの作成
trackbox 200, 40, $101 | $20
objid(1) = stat
mes "オブジェクトID:" + objid(
1)
;トラックボックスの選択範囲の設定と取得
tracksel 30, 60, 0 ;30〜60を選択
;tracksel 20, 80, 1
;tracksel 20, 80, 2
;tracksel 20, 80, 3
tracksel 0, 0 ;取得
s = stat
tracksel 1, 1 ;取得
e = stat
mes "範囲:" + s +
" 〜 " + e
;トラックボックスのページサイズを設定
trackpsz 30
;--------------------
;
; 1つ目のトラックボックスを操作
;
;トラックボックスの目盛りの設定と取得
sel_trackbox objid(0) ;操作するトラックボックスを選択
trackmrk 45, 2
trackmrk , 1
mes "ID(" + objid(
0) +
")のトラックボックスの目盛りの数:"+
stat
;ページサイズ取得
trackpsz 0, 1
mes "ID(" + objid(
0) +
")のページサイズ:" +
stat
#endif
;サンプルここまで-------------------------------------------